diff options
author | Karl Berry <karl@freefriends.org> | 2022-04-30 20:02:45 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2022-04-30 20:02:45 +0000 |
commit | 3bf07308bf7627c8c23570e03f2bf8ae7058c8c1 (patch) | |
tree | ce7e4ad794501767b7967f415d6ce5e648dd8e23 | |
parent | e1738ea0853a78ce457cffe0611bcee5e2062154 (diff) |
thermodynamics (30apr22)
git-svn-id: svn://tug.org/texlive/trunk@63188 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r-- | Master/texmf-dist/doc/latex/thermodynamics/README.md | 33 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/thermodynamics/thermodynamics-examples.tex | 212 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/thermodynamics/thermodynamics.pdf | bin | 0 -> 201715 bytes | |||
-rw-r--r-- | Master/texmf-dist/source/latex/thermodynamics/thermodynamics.dtx | 3526 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/thermodynamics/thermodynamics.ins | 73 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/thermodynamics/thermodynamics.sty | 1005 | ||||
-rwxr-xr-x | Master/tlpkg/bin/tlpkg-ctan-check | 2 | ||||
-rw-r--r-- | Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc | 1 | ||||
-rw-r--r-- | Master/tlpkg/tlpsrc/thermodynamics.tlpsrc | 0 |
9 files changed, 4851 insertions, 1 deletions
diff --git a/Master/texmf-dist/doc/latex/thermodynamics/README.md b/Master/texmf-dist/doc/latex/thermodynamics/README.md new file mode 100644 index 00000000000..ec0d2d50011 --- /dev/null +++ b/Master/texmf-dist/doc/latex/thermodynamics/README.md @@ -0,0 +1,33 @@ +thermodynamics - A package for chemical engineers and others +============================================================= + +Thermodynamics texts (textbooks, articles, and so forth) are typically filled +with underlined and overlined symbols, partial derivatives surrounded by +delimiters and containing subscripts, sums over multiple components, and a +myriad of symbols, including superscript and subscript modifiers. This package +provides a robust, flexible set of macros to define notation for symbols, +partial derivatives, sums, and products frequently encountered in mixture +thermodynamics. Changing one's notes from one textbook to another or from one +notation style to another can be achieved relatively easily by changing package +options, without any changes to the user's code (other than perhaps adjusting +line breaks). + +Installation +------------ + +The package is suppled in `dtx` format with an accompanying `ins` file to +install the package. Run `latex thermodynamics.ins` to extract the package; +instructions for building the documentation are included in the `ins` file. + +This package requires the `amstext` package. + +Typesetting the documentation requires several other packages: + - `geometry` + - `fontenc` + - `textcomp` + - `amsmath` + - `pxfonts` + - `array` + - `booktabs` + - `footmisc` + - `caption` diff --git a/Master/texmf-dist/doc/latex/thermodynamics/thermodynamics-examples.tex b/Master/texmf-dist/doc/latex/thermodynamics/thermodynamics-examples.tex new file mode 100644 index 00000000000..d061ecec6d9 --- /dev/null +++ b/Master/texmf-dist/doc/latex/thermodynamics/thermodynamics-examples.tex @@ -0,0 +1,212 @@ +%% +%% This is file `thermodynamics-examples.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% thermodynamics.dtx (with options: `example') +%% +%% This is a generated file. +%% +%% Copyright (C) 2017-2018 by Karl D. Hammond +%% +%% Karl D. Hammond, +%% Department of Chemical Engineering +%% 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. +\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} +\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*} +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*} +\end{document} +\endinput +%% +%% End of file `thermodynamics-examples.tex'. diff --git a/Master/texmf-dist/doc/latex/thermodynamics/thermodynamics.pdf b/Master/texmf-dist/doc/latex/thermodynamics/thermodynamics.pdf Binary files differnew file mode 100644 index 00000000000..28957964eb7 --- /dev/null +++ b/Master/texmf-dist/doc/latex/thermodynamics/thermodynamics.pdf diff --git a/Master/texmf-dist/source/latex/thermodynamics/thermodynamics.dtx b/Master/texmf-dist/source/latex/thermodynamics/thermodynamics.dtx new file mode 100644 index 00000000000..a9c8348997d --- /dev/null +++ b/Master/texmf-dist/source/latex/thermodynamics/thermodynamics.dtx @@ -0,0 +1,3526 @@ +% \iffalse meta-comment +% File: thermodynamics.dtx Copyright (C) 2021 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} +%</driver> +% +%<package>\NeedsTeXFormat{LaTeX2e} +%<package>\ProvidesPackage{thermodynamics} +%<*package> + [2022/04/29 v1.00 thermodynamics package] +%</package> +% +%<*driver> +\documentclass[11pt,letterpaper]{ltxdoc} +\usepackage[margin=1in,left=1.85in]{geometry} +\usepackage[T1]{fontenc} +\usepackage[full]{textcomp} +\usepackage{amsmath} +\usepackage{pxfonts} +\usepackage{array} +\usepackage{booktabs} +\usepackage{footmisc} +\usepackage[labelfont=bf,labelsep=period]{caption} +%\EnableCrossrefs +%\CodelineIndex +\PageIndex +\CodelineNumbered +\RecordChanges +%\OnlyDescription +\begin{document} + \DocInput{thermodynamics.dtx} +\end{document} +%</driver> +% \fi +% +% \CheckSum{2286} +% +% \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} +% +% \GetFileInfo{thermodynamics.dtx} +% +% \title{The \textsf{thermodynamics} package\thanks{This document +% corresponds to \textsf{thermodynamics}~\fileversion, dated \filedate.}} +% \author{Karl D. Hammond \\ \texttt{hammondkd@missouri.edu}} +% \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} +% +% \newcommand*{\thermounderline}[1]{% +% \mkern2mu\underline{\mkern-2mu #1\mkern-3mu}\mkern3mu% +% } +% \newcommand*{\thermooverline}[1]{% +% \mkern2mu\overline{\mkern-2mu #1\mkern-2mu}\mkern2mu% +% } +% \newcommand*{\Partial}[3]{\ensuremath{\left(\frac{\partial #1}{\partial #2}\right)_{#3}}} +% \newcommand*{\Ut}{\mkern1mu\underline{\mkern-1mu U\mkern-4mu}\mkern4mu} +% \newcommand*{\Upm}[2][]{\mkern2mu\overline{\mkern-2mu U_{#2}^{#1}\mkern-2mu}\mkern2mu} +% \newcommand*{\Ht}{\mkern1mu\underline{\mkern-1mu H\mkern-4mu}\mkern4mu} +% \newcommand*{\Hm}{H} +% \newcommand*{\Hpm}[2][]{\mkern2mu\overline{\mkern-2mu H_{#2}^{#1}\mkern-1mu}\mkern1mu} +% \newcommand*{\Ft}{\mkern1mu\underline{\mkern-1mu A\mkern-4mu}\mkern4mu} +% \newcommand*{\Gt}{\mkern1mu\underline{\mkern-1mu G\mkern-4mu}\mkern4mu} +% \newcommand*{\Gpm}[2][]{\mkern2mu\overline{\mkern-2mu G_{#2}^{#1}\mkern-1mu}\mkern1mu} +% \newcommand*{\Spm}[2][]{\mkern2mu\overline{\mkern-2mu S_{#2}^{#1}\mkern-1mu}\mkern1mu} +% \newcommand*{\Vpm}[2][]{\mkern1mu\overline{\mkern-1mu V_{\mkern-2mu #2}^{#1}\mkern-2mu}\mkern2mu} +% \newcommand*{\St}{\mkern1mu\underline{\mkern-1mu S\mkern-3mu}\mkern3mu} +% \newcommand*{\Vt}{\mkern3mu\underline{\mkern-3mu V\mkern-4mu}\mkern4mu} +% \newcommand*{\Lt}{\mkern1mu\underline{\mkern-1mu \Omega\mkern-4mu}\mkern4mu} +% \newcommand*{\cPpm}[2][]{\mkern2mu\overline{\mkern-2mu C_{P,#2}^{#1}\mkern-1mu}\mkern1mu} +% +% \newcommand*{\Nt}{n} +% \newcommand*{\allNs}{\vec\Nt} +% \newcommand*{\allNsbut}[2][j]{\Nt_{#1\neq #2}} +% \newcommand*{\allXs}{\vec x} +% +% \section{Introduction} +% The purpose of this package is to simplify the typesetting of equations in +% thermodynamics, specifically chemical engineering thermodynamics, which are +% often cumbersome to enter. For example, consider the following equation: +% \begin{equation} +% d\Ut = \Partial{\Ut}{\St}{\Vt,\allNs} \mkern-10mu d\St +% + \Partial{\Ut}{\Vt}{\St,\allNs} \mkern-10mu d\Vt +% + \sum_{i=1}^C \Partial{\Ut}{\Nt_i}{\St,\Vt,\allNsbut{i}} +% \mkern-10mu 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 denotes 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 +% \[ +% dU = \Partial{U}{S}{V,N_1,\dotsc,N_n} \mkern-15mu dS +% + \Partial{U}{V}{S,N_1,\dotsc,N_n} \mkern-15mu dV +% + \sum_{i=1}^n \Partial{U}{N_i}{S,V,N_1,\dotsc,[N_i],\dotsc,N_n} +% \mkern-20mu dN_i +% \] +% 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) +% \[ \left(\frac{\partial H}{\partial T}\right)_P \mkern-8mu +% = T\left(\frac{\partial S}{\partial T}\right)_P \mkern-8mu +% = -T\left(\frac{\partial^2 G}{\partial T^2}\right)_P \mkern-8mu +% = C_P \] +% 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 +% \[ \left(\frac{\partial \Gpm{i}}{\partial P}\right)_{T,\allNs} +% \mkern-15mu% +% = \left(\frac{\partial^2 \Gt}{\partial P\partial n_i}\right)_{T,\allNsbut{i}} +% \mkern-15mu% +% = \left(\frac{\partial^2 \Gt}{\partial n_i\partial P}\right)_{T,\allNsbut{i}} +% \mkern-15mu% +% = \left(\frac{\partial \Vt}{\partial n_i}\right)_{T,P,\allNsbut{i}} +% \mkern-15mu% +% = \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 switch locally +% between different delimiters on partial derivatives. +% +% \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. +% +% \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, $\thermounderline{U}$ to $U^t$ for extensive properties is trivial. +% +% ^^A \DescribeMacro{\cP} +% ^^A \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 $\hat C_P$ and $\hat C_V$, +% respectively. There are also extensive versions, so \cs{cPt} and \cs{cVt} +% will render as $\thermounderline{C}_P$ and $\thermounderline{C}_V,$ +% respectively. Note that \cs{cP} and friends require you to surround +% \cs{text} with brackets if the portion with \cs{text} in it is not the last +% argument. For example, \verb"\cP_i^\text{A}" will work as expected, but +% \verb"\cP^\text{A}_i" will not: you need to use \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 +% \[ \thermooverline{C_{V,i}} +% = \left(\frac{\partial\thermounderline{C}_V} +% {\partial\Nt_i}\right)_{T,P,\allNsbut{i}} +% = \frac{\partial}{\partial\Nt_i} +% \left[ -T\left(\frac{\partial^2\Ft}{\partial T^2}\right)_{\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 +% $\thermounderline{A}$)\@. +% } +% \label{table:symbols} +% \SpecialUsageIndex{\Qt}\relax +% \SpecialUsageIndex{\Qm}\relax +% \SpecialUsageIndex{\Qs}\relax +% \SpecialUsageIndex{\Wt}\relax +% \SpecialUsageIndex{\Wm}\relax +% \SpecialUsageIndex{\Ws}\relax +% \SpecialUsageIndex{\Et}\relax +% \SpecialUsageIndex{\Em}\relax +% \SpecialUsageIndex{\Es}\relax +% \SpecialUsageIndex{\Epm}\relax +% \SpecialUsageIndex{\Ut}\relax +% \SpecialUsageIndex{\Um}\relax +% \SpecialUsageIndex{\Us}\relax +% \SpecialUsageIndex{\Upm}\relax +% \SpecialUsageIndex{\Ht}\relax +% \SpecialUsageIndex{\Hm}\relax +% \SpecialUsageIndex{\Hs}\relax +% \SpecialUsageIndex{\Hpm}\relax +% \SpecialUsageIndex{\St}\relax +% \SpecialUsageIndex{\Sm}\relax +% \SpecialUsageIndex{\Ss}\relax +% \SpecialUsageIndex{\Spm}\relax +% \SpecialUsageIndex{\Ft}\relax +% \SpecialUsageIndex{\Fm}\relax +% \SpecialUsageIndex{\Fs}\relax +% \SpecialUsageIndex{\Fpm}\relax +% \SpecialUsageIndex{\Gt}\relax +% \SpecialUsageIndex{\Gm}\relax +% \SpecialUsageIndex{\Gs}\relax +% \SpecialUsageIndex{\Gpm}\relax +% \SpecialUsageIndex{\At}\relax +% \SpecialUsageIndex{\Am}\relax +% \SpecialUsageIndex{\As}\relax +% \SpecialUsageIndex{\Apm}\relax +% \SpecialUsageIndex{\Nt}\relax +% \SpecialUsageIndex{\Lt}\relax +% \SpecialUsageIndex{\Lm}\relax +% \SpecialUsageIndex{\Ls}\relax +% \SpecialUsageIndex{\Lpm}\relax +% \SpecialUsageIndex{\Bt}\relax +% \SpecialUsageIndex{\Bm}\relax +% \SpecialUsageIndex{\Bs}\relax +% \SpecialUsageIndex{\Bpm}\relax +% \SpecialUsageIndex{\Mt}\relax +% \SpecialUsageIndex{\Mm}\relax +% \SpecialUsageIndex{\Ms}\relax +% \SpecialUsageIndex{\Mpm}\relax +% \centering +% \begin{minipage}{4.12in}\renewcommand*{\footnoterule}{\vskip-1ex}% +% \centering\small +% \begin{tabular}{l l l l l} +% \toprule +% Property & Total & Molar & Specific & Partial Molar \\ +% \midrule +% Heat & \cs{Qt} & \cs{Qm} & \cs{Qs} & N/A \\ +% Work & \cs{Wt} & \cs{Wm} & \cs{Ws} & N/A \\ +% Total energy & \cs{Et} & \cs{Em} & \cs{Es} & \cs{Epm} \\ +% Internal energy & \cs{Ut} & \cs{Um} & \cs{Us} & \cs{Upm} \\ +% Enthalpy & \cs{Ht} & \cs{Hm} & \cs{Hs} & \cs{Hpm} \\ +% Entropy & \cs{St} & \cs{Sm} & \cs{Ss} & \cs{Spm} \\ +% Volume & \cs{Vt} & \cs{Vm} & \cs{Vs} & \cs{Vpm} \\ +% Helmholtz free energy & \cs{Ft} & \cs{Fm} & \cs{Fs} & \cs{Fpm} \\ +% Gibbs free energy & \cs{Gt} & \cs{Gm} & \cs{Gs} & \cs{Gpm} \\ +% Surface area & \cs{At} & \cs{Am} & \cs{As} & \cs{Apm} \\ +% Grand potential\footnote{The grand potential, +% $\Lt(T,\Vt,\vec{\mu}\mkern1mu) = \Ut - T\St - \sum_i^C \mu_i \Nt_i,$ +% is also called the Landau free energy by some authors.} +% & \cs{Lt} & \cs{Lm} & \cs{Ls} & \cs{Lpm} \\ +% Moles & \cs{Nt} & N/A & N/A & N/A \\ +% $B$ (generic property) & \cs{Bt} & \cs{Bm} & \cs{Bs} & \cs{Bpm} \\ +% $M$ (generic property) & \cs{Mt} & \cs{Mm} & \cs{Ms} & \cs{Mpm} \\ +% \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 circ} renders as +% $C_{P,i}^\circ$, also as expected. You can also reverse it: +% \texttt{\textbackslash cP\^{}\textbackslash circ\_i} becomes +% $C^\circ_{P,i}$.} +% \label{table:conveniences} +% \SpecialUsageIndex{\cP}\relax +% \SpecialUsageIndex{\cV}\relax +% \SpecialUsageIndex{\kappaT}\relax +% \SpecialUsageIndex{\kappaS}\relax +% \SpecialUsageIndex{\alphaP}\relax +% \SpecialUsageIndex{\alphaS}\relax +% \SpecialUsageIndex{\heatcapacitysymbol}\relax +% \SpecialUsageIndex{\compressibilitysymbol}\relax +% \SpecialUsageIndex{\expansivitysymbol}\relax +% \SpecialUsageIndex{\fpure}\relax +% \SpecialUsageIndex{\fmix}\relax +% \SpecialUsageIndex{\fsat}\relax +% \SpecialUsageIndex{\phipure}\relax +% \SpecialUsageIndex{\phimix}\relax +% \SpecialUsageIndex{\phisat}\relax +% \SpecialUsageIndex{\Psat}\relax +% \SpecialUsageIndex{\Pvap}\relax +% \SpecialUsageIndex{\sat}\relax +% \SpecialUsageIndex{\Henryrat}\relax +% \SpecialUsageIndex{\Henrymol}\relax +% \SpecialUsageIndex{\gammarat}\relax +% \SpecialUsageIndex{\gammamol}\relax +% \SpecialUsageIndex{\Deltamix}\relax +% \SpecialUsageIndex{\Deltarxn}\relax +% \SpecialUsageIndex{\Deltavap}\relax +% \SpecialUsageIndex{\Deltasub}\relax +% \SpecialUsageIndex{\Deltafus}\relax +% \SpecialUsageIndex{\mixing}\relax +% \SpecialUsageIndex{\reaction}\relax +% \SpecialUsageIndex{\fusion}\relax +% \SpecialUsageIndex{\vaporization}\relax +% \SpecialUsageIndex{\sublimation}\relax +% \begin{minipage}{\linewidth} +% \small +% \addtolength{\tabcolsep}{-2pt}\relax +% \addtolength{\extrarowheight}{0.75ex}\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 & \verb"\cP"\footnote{\relax +% Extensive and specific (per-unit-mass) versions are available +% as \texttt{\textbackslash cPt} and \texttt{\textbackslash cPs}, +% respectively, with similar macros for the isochoric heat capacity. +% \label{fn:cP}} +% & $C_P$ & $\displaystyle T\left(\frac{\partial S}{\partial T}\right)_P$ +% & \verb"\heatcapacitysymbol" \\[2.0ex] +% Isochoric heat capacity & \verb"\cV"\footref{fn:cP} & $C_V$ +% & $\displaystyle T\left(\frac{\partial S}{\partial T}\right)_V$ +% & \verb"\heatcapacitysymbol" \\[2.0ex] +% Isothermal compressibility & \verb"\kappaT" & $\kappa_T$ & +% \(\displaystyle -\frac{1}{V} \left(\frac{\partial V}{\partial P}\right)_T \) +% & \verb"\compressibilitysymbol" \\[2.0ex] +% Isentropic compressibility & \verb"\kappaS" & $\kappa_S$ & +% \(\displaystyle -\frac{1}{V} \left(\frac{\partial V}{\partial P}\right)_S\) +% & \verb"\compressibilitysymbol" \\[2.0ex] +% Isobaric expansivity & \verb"\alphaP" & $\alpha_P$ & +% \(\displaystyle \frac{1}{V} \left(\frac{\partial V}{\partial T}\right)_P\) +% & \verb"\expansivitysymbol" \\[2.0ex] +% Isentropic expansivity & \verb"\alphaS" & $\alpha_S$ & +% \(\displaystyle \frac{1}{V} \left(\frac{\partial V}{\partial T}\right)_S\) +% & \verb"\expansivitysymbol" \\[2.0ex] +% Pure fugacity & \verb"\fpure" & $f$ & $\phi P$ \\ +% Mixture fugacity & \verb"\fmix" & $\hat f$ & $\hat f_i = x_i\hat\phi_i P$ \\[0.5ex] +% Saturation fugacity & \verb"\fsat" & $f^\text{sat}$ +% & $\phi^\text{sat} P^\text{sat}$ & \cs{sat} \\ +% Pure fugacity coeff.\ & \verb"\phipure" & $\phi$ & +% \multicolumn{2}{l}{\( \phi_i +% = \exp\left(\frac{1}{RT}\int_0^P V_i(T,p) +% - \frac{RT}{p}\,dp\right) \)} \\ +% Mixture fugacity coeff.\ & \verb"\phimix" & $\hat\phi$ +% & \multicolumn{2}{l}{\( \hat\phi_i +% = \exp\left(\frac{1}{RT}\int_0^P \Vpm{i}(T,p,\allXs) +% - \frac{RT}{p}\,dp\right) \)} \\ +% Henry's constant (rational) & \verb"\Henryrat" & $h$ +% & $\gamma_i^\infty f_i$ \\ +% Henry's constant (molal) & \verb"\Henrymol" & $\mathcal{H}$ +% & $M_s \gamma_i^\infty f_i$ \\ +% Rational activity coeff.\ & \verb"\gammarat" & $\gamma^\ast$ +% & $\gamma/\gamma^\infty$ \\ +% Molal activity coeff.\ & \verb"\gammamol" & $\gamma^\square$ +% & $x_s \gamma/\gamma^\infty$ \\ +% Saturation fugacity coeff.\ & \verb"\phisat" & $\phi^\text{sat}$ +% & $\phi(T,P^\text{sat})$ & \cs{sat} \\ +% Saturation pressure & \verb"\Psat" & $P^\text{sat}$ && \cs{sat} \\ +% Vapor pressure & \verb"\Pvap" & \multicolumn{3}{l}{Currently a synonym +% for \cs{Psat}\footnote{If you want \cs{Pvap} to produce $P^\text{vap}$ +% instead of $P^\text{sat}$, you should redefine the \cs{sat} macro.}} \\ +% Standard state & \verb"\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^\circ + RT \log a_i$.} & $\circ$ \\ +% Standard pressure & \verb"\Pstd" & $P^\circ$ & & \cs{std} \\ +% Standard fugacity & \verb"\fstd" & $f^\circ$ & $f(T,P^\circ)$ & \cs{std} +% \\ +% Change on mixing & \verb"\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 - \sum_i x_i M_i$ & \verb"\mixing" \\ +% Change on reaction & \verb"\Deltarxn"\footref{fn:Deltausage} +% & $\Delta M_\text{rxn}$ +% & $\sum_i \nu_i M_i$ & \verb"\reaction" \\ +% Change on melting & \verb"\Deltafus"\footref{fn:Deltausage} +% & $\Delta M^\text{fus}$ & $M^L - M^S$ & \verb"\fusion" \\ +% Change on boiling & \verb"\Deltavap"\footref{fn:Deltausage} +% & $\Delta M^\text{vap}$ & $M^V - M^L$ & \verb"\vaporization" \\ +% Change on subliming & \verb"\Deltasub"\footref{fn:Deltausage} +% & $\Delta M^\text{sub}$ & $M^V - M^S$ & \verb"\sublimation" \\ +% \bottomrule +% \end{tabular} +% \end{minipage} +% \end{table} +% +% \subsection{Partial Molar Properties} +% \DescribeMacro{\Upm} +% \DescribeMacro{\Hpm} +% Partial molar quantities are typically 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 \Hpm_i \quad \Hpm^\IG_i \] +%\end{verbatim} +% will typeset as +% \[ \Upm{i} \quad \Upm[\text{IG}]{i} \quad \Hpm{i} \quad \Hpm[\text{IG}]{i}\] +% There are also partial molar heat capacities available via \cs{cPpm} and +% \cs{cVpm}. +% \textbf{Important}: The \cs{text} command defined by the \verb"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 defined via the macro +% \DescribeMacro{\Gpm} +% \begin{verbatim} +% \newcommand*{\Gpm}{\partialmolar{\Gibbs@symbol}} +%\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{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{Fugacities and Fugacity Coefficients} +% \DescribeMacro{\fpure} +% \DescribeMacro{\fmix} +% \DescribeMacro{\phipure} +% \DescribeMacro{\phimix} +% Different textbooks use different modifications of 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 the 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. \] +%\end{verbatim} +% With the default package options, this produces +% \[ \hat f_j = x_j \hat\phi_j P = x_j \gamma_j f_j. \] +% 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. \] +% Similarly, the |Prausnitz| package option causes it to generate +% \[ f_j = x_j \phi_j P = x_j \gamma_j f_{\text{pure},j}, \] +% and the |Sandler| option causes it to generate +% \[ \bar f_j = x_j \bar \phi_j P = x_j \gamma_j f_j. \] +% +% \subsubsection{Activity Coefficients and Henry's Constants} +% \DescribeMacro{\gammarat} +% \DescribeMacro{\gammamol} +% \DescribeMacro{\Henryrat} +% \DescribeMacro{\Henrymol} +% The activity coefficient can be generated with \cs{gamma}, as usual. +% 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 +% \[ \hat f_i = x_i \gamma_i f_i = x_i \gamma^*_i h_i +% = C_i \gamma^\square_i \mathcal{H}_i \] +% using the default options. +% +% \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 $P^\text{sat}$, +% $f^\text{sat}$, and $\phi^\text{sat}$, respectively. 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"\renewcommand*{\sat}{{\text{vap}}}". +% This is done automatically using package option |Sandler|. +% +% \subsubsection{Standard States} +% \DescribeMacro{\std} +% \DescribeMacro{\Pstd} +% \DescribeMacro{\fstd} +% 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 pressures, and \cs{fstd} is defined for standard fugacities 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 \mu^\std_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 +% \[ \Delta G_\text{rxn} = \sum_{i=1}^C \nu_i \mu_i +% = \sum_{i=1}^C \left[ \nu_i \mu^\circ_i +% + \nu_i RT \log\left(\frac{\hat f_i}{f_i^\circ}\right) \right] +% = \Delta G^\circ_\text{rxn} +% + RT \log\left[\prod_{i=1}^C a_i^{\nu_i} \right] \] +% with the default settings. +% +% \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 +% \[ \Delta G_\text{mix} = G - \sum_{i=1}^C x_i G_i +% = \Delta H_\text{mix} - T\Delta S_\text{mix}. \] +% 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 +% \[ \Delta\Hm^\text{sub} = \Hm^V - \Hm^S = \Hm^V - \Hm^L + (\Hm^L - \Hm^S) +% = \Delta\Hm^\text{vap} + \Delta\Hm^\text{fus} \] +% with the default options. Note that some textbooks (e.g., |Sandler|) typeset +% these quantities quite differently. +% +% \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 +% \[ \Delta\Hm_\text{rxn}^\circ = \sum_{i=1}^C \nu_i \Delta\Hm_{f,i}^\circ. \] +% 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,$ +% $\thermounderline{U}^R,$ $\hat U^R, $ and $\smash[t]{\Upm[R]{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}. +% +% \DescribeMacro{\excess} +% \DescribeMacro{\residual} +% 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 +% want \cs{SE}, which normally produces $S^E$, 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} +% \renewcommand*{\excess}{{EX}} +%\end{verbatim} +% or possibly +% \begin{verbatim} +% \renewcommand*{\excess}{{\mathrm{EX}}} +%\end{verbatim} +% or even +% \begin{verbatim} +% \renewcommand*{\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 not possible to use superscripts with the excess or +% residual properties; in the event the user needs this, the \cs{excess} and +% \cs{residual} macros can be used directly, viz., +% \begin{verbatim} +% \begin{gather*} +% \Hm^{\excess,\std} = \HE(T,\Pstd) \\ +% \renewcommand*{\excess}{EX} +% \Hm^{\excess,\std} = \HE(T,\Pstd) +% \end{gather*} +%\end{verbatim} +% which yields +% \begin{gather*} +% \Hm^{E,\circ} = H^E(T,P^\circ) \\ +% \Hm^{EX,\circ} = H^{EX}(T,P^\circ) +% \end{gather*} +% using the default options. +% \clearpage +% +% \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} +% \begin{gather*} +% \Partial{\Hm}{T}{P} = \cP \qquad \Partial*{\Hm}{T}{P} = \cP +% \end{gather*} +%\end{verbatim} +% which yields +% \begin{gather*} +% \left(\frac{\partial\Hm}{\partial T}\right)_{P} = C_P \qquad +% \left(\frac{\partial\Hm}{\partial T}\right)_{P} \mkern-8mu = C_P +% \end{gather*} +% \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} = \left(\frac{\partial\Vt} +% {\partial\Nt_i}\right)_{T,P,\allNsbut{i}} +% \mkern-15mu +% = \left(\frac{\partial^2\Gt} +% {\partial\Nt_i\partial P}\right)_{T,\allNsbut{i}} +% \mkern-15mu +% = \left(\frac{\partial^2\Gt} +% {\partial P\partial\Nt_i}\right)_{T,\allNsbut{i}} +% \mkern-15mu +% = \left(\frac{\partial\Gpm{i}}{\partial P}\right)_{T,\allNs}. \] +% \DescribeMacro{\PartialBigg} +% \SpecialUsageIndex{\PartialBigg*}\relax +% \DescribeMacro{\PartialSecondBigg} +% \SpecialUsageIndex{\PartialSecondBigg*}\relax +% \DescribeMacro{\PartialMixSecondBigg} +% \SpecialUsageIndex{\PartialMixSecondBigg*}\relax +% \DescribeMacro{\Partialbigg} +% \SpecialUsageIndex{\Partialbigg*}\relax +% \DescribeMacro{\PartialSecondbigg} +% \SpecialUsageIndex{\PartialSecondbigg*}\relax +% \DescribeMacro{\PartialMixSecondbigg} +% \SpecialUsageIndex{\PartialMixSecondbigg*}\relax +% 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 \verb"amsmath"'s \cs{Biggl} and \cs{Biggr} macros in place of \cs{left} +% and \cs{right} to size the parentheses accordingly; \cs{Partiallbigg} uses +% \cs{biggl} and \cs{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} +% = \left(\frac{\partial\Vt}{\partial \Nt_i}\right)_{T,P,\allNsbut{i}} +% \mkern-15mu +% = \left(\frac{\partial\Gpm{i}}{\partial P}\right)_{T,\allNs} +% \mkern-15mu +% = \Biggl(\frac{\partial\Gpm{i}}{\partial P}\Biggr)_{T,\allNs} +% \mkern-15mu +% = RT\left(\frac{\partial\log\hat f_i}{\partial P}\right)_{T,\allNs} +% \mkern-15mu +% = RT\,\Biggl(\frac{\partial\log\hat f_i}{\partial P}\Biggr)_{T,\allNs} +% \mkern-15mu +% = RT\,\biggl(\frac{\partial\log\hat f_i}{\partial P}\biggr)_{T,\allNs} \] +% Note that a similar effect---possibly with other side effects---can be +% achieved with \verb"amsmath"'s \cs{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} +% = \left(\frac{\partial\Vt}{\partial \Nt_i}\right)_{T,P,\allNsbut{i}} +% = \left(\frac{\partial\smash{\Gpm{i}}}{\partial P}\right)_{T,\allNs}. \] +% Note that the vertical spacing is not quite as good here as it was above. +% This can be fixed by using the optional argument to \cs{smash}, viz., +% \begin{verbatim} +% \[ \Vpm_i = \Partial{\Vt}{\Nt_i}{T,P,\allNsbut{i}} +% = \Partial{\smash[t]{\Gpm_i}}{P}{T,\allNs} \] +%\end{verbatim} +% \[ \Vpm{i} +% = \left(\frac{\partial\Vt}{\partial \Nt_i}\right)_{T,P,\allNsbut{i}} +% = \left(\frac{\partial\smash[t]{\Gpm{i}}}{\partial P}\right)_{T,\allNs}. \] +% 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\PartialSecond{\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\Partial{^2\St}{T\partial\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 as well, 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} = \left(\frac{\partial\Vt}{\partial\Nt_k}\right)_{T,P,\Nt_{j\neq k}} \] +% or perhaps +% \[ \Vpm{k} = \left(\frac{\partial\Vt}{\partial\Nt_k}\right)_{T,P,\Nt_1,\dotsc,[\Nt_k],\dots,\Nt_C} \] +% 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 +% \[ C_P = \left(\frac{\partial\Hm}{\partial T}\right)_{P,\vec{x}} \] +% or perhaps +% \[ C_P = \left(\frac{\partial\Hm}{\partial T}\right)_{P,x_1,\dotsc,x_C}. \] +% 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. The macros \cs{allNsbut}, +% \cs{allMsbut}, \cs{allmusbut}, \cs{allXsbut}, \cs{allYsbut}, and +% \cs{allWsbut} 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 +% \[ \left(\frac{\partial\Ht}{\partial\Nt_1}\right)_{T,P,\Nt_{j\neq 1}} +% = \left(\frac{\partial\Ht}{\partial\Nt_1}\right)_{T,P,\Nt_{m\neq 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 +% \[ \left(\frac{\partial\Hm}{\partial x_i}\right)_{T,P,x_{j\neq i,C}} +% = \left(\frac{\partial\Hm}{\partial x_i}\right)_{T,P,x_{m\neq i,C}} +% = \Hpm{i} - \Hpm{C} \] +% The user must supply their own redefinition if they wish to hold something +% other than \cs{ncomponents} constant in addition to the argument. +% Using the \verb"moles-range" package option, for which \verb"\allXsbut{k}" +% expands to $x_1,\dotsc,[x_k],\dotsc,x_{C-1}$ rather than $x_{j \neq k,C}$, +% the optional argument is ignored. +% +% \DescribeMacro{\allbut} +% \DescribeMacro{\allbutlastand} +% Users can define new ``all but'' macros using the \cs{allbut} and +% \cs{allbutlastand} commands. For example, +% \begin{verbatim} +% \newcommand*{\allNsbut}[2][j]{\allbut[#1]{#2}{\Nt}} +% \newcommand*{\allXsbut}[2][j]{\allbutlastand[#1]{#2}{x}} +%\end{verbatim} +% are the definitions of \cs{allNsbut} and \cs{allXsbut}, respectively. +% +% \subsection{Sums and Products} +% \DescribeMacro{\sumall} +% \DescribeMacro{\sumallbutlast} +% \DescribeMacro{\prodall} +% It is common to require sums and products such as +% \[ \sum_{i=1}^C x_i = 1 \quad \text{or} \quad +% x_C = 1 - \sum_{i=1}^{C-1} x_i \quad \text{or} \quad +% \Gt = \sum_{j=1}^C \mu_j\Nt_j \quad \text{and} \quad +% K = \prod_{k=1}^C 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 \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; and the +% manner of denoting extensive, molar, and specific properties. 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". +% +% \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 +% \verb"EUAGHan" & $\thermounderline{E}$ +% & $\thermounderline{U}$ +% & $\thermounderline{A}$ +% & $\thermounderline{G}$ +% & $\thermounderline{H}$ +% & $\thermounderline{a}$ +% & $n$ +% \\ +% \verb"EUAGHaN" & $\thermounderline{E}$ +% & $\thermounderline{U}$ +% & $\thermounderline{A}$ +% & $\thermounderline{G}$ +% & $\thermounderline{H}$ +% & $\thermounderline{a}$ +% & $N$ +% \\ +% \verb"EUHAGan" & \multicolumn{7}{l}{(synonym for \texttt{EUAGHan})} \\ +% \verb"EUHAGaN" & \multicolumn{7}{l}{(synonym for \texttt{EUAGHaN})} \\ +% \verb"EUFGHAn" & $\thermounderline{E}$ +% & $\thermounderline{U}$ +% & $\thermounderline{F}$ +% & $\thermounderline{G}$ +% & $\thermounderline{H}$ +% & $\thermounderline{A}$ +% & $n$ +% \\ +% \verb"EUFGHAN" & $\thermounderline{E}$ +% & $\thermounderline{U}$ +% & $\thermounderline{F}$ +% & $\thermounderline{G}$ +% & $\thermounderline{H}$ +% & $\thermounderline{A}$ +% & $N$ +% \\ +% \verb"EEFGHAn" & $\thermounderline{E}$ +% & $\thermounderline{E}$ +% & $\thermounderline{F}$ +% & $\thermounderline{G}$ +% & $\thermounderline{H}$ +% & $\thermounderline{A}$ +% & $n$ +% \\ +% \verb"EEFGHAn" & $\thermounderline{E}$ +% & $\thermounderline{E}$ +% & $\thermounderline{F}$ +% & $\thermounderline{G}$ +% & $\thermounderline{H}$ +% & $\thermounderline{A}$ +% & $N$ +% \\ +% \verb"EEFGHan" & $\thermounderline{E}$ +% & $\thermounderline{E}$ +% & $\thermounderline{F}$ +% & $\thermounderline{G}$ +% & $\thermounderline{H}$ +% & $\thermounderline{a}$ +% & $n$ +% \\ +% \verb"EEFGHaN" & $\thermounderline{E}$ +% & $\thermounderline{E}$ +% & $\thermounderline{F}$ +% & $\thermounderline{G}$ +% & $\thermounderline{H}$ +% & $\thermounderline{a}$ +% & $N$ +% \\ +% \verb"EEAGHaN" & $\thermounderline{E}$ +% & $\thermounderline{E}$ +% & $\thermounderline{A}$ +% & $\thermounderline{G}$ +% & $\thermounderline{H}$ +% & $\thermounderline{a}$ +% & $N$ +% \\ +% \verb"EUAGHAn" & $\thermounderline{E}$ +% & $\thermounderline{U}$ +% & $\thermounderline{A}$ +% & $\thermounderline{G}$ +% & $\thermounderline{H}$ +% & $\thermounderline{A}$ +% & $n$ +% \\ +% \verb"EUAGHAN" & $\thermounderline{E}$ +% & $\thermounderline{U}$ +% & $\thermounderline{A}$ +% & $\thermounderline{G}$ +% & $\thermounderline{H}$ +% & $\thermounderline{A}$ +% & $N$ +% \\ +% \verb"EUFGHan" & $\thermounderline{E}$ +% & $\thermounderline{U}$ +% & $\thermounderline{F}$ +% & $\thermounderline{G}$ +% & $\thermounderline{H}$ +% & $\thermounderline{a}$ +% & $n$ +% \\ +% \verb"EUFGHaN" & $\thermounderline{E}$ +% & $\thermounderline{U}$ +% & $\thermounderline{F}$ +% & $\thermounderline{G}$ +% & $\thermounderline{H}$ +% & $\thermounderline{a}$ +% & $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 + \sum_i \mu_i \Nt_i + \sigma d\At +% \qquad \Hm = \Um + P\Vm \qquad \Et = \Ut + \frac12 mv^2 \] +%\end{verbatim} +% which would look like +% \[ \thermounderline{A} +% = \thermounderline{U} - T\thermounderline{S} +% = -P\thermounderline{V} + \sum_i \mu_i n_i + \sigma d\thermounderline{a} +% \qquad H = U + PV +% \qquad \thermounderline{E} = \thermounderline{U} + \frac12 mv^2. \] +% Using the \verb"EUFGHAN" option, the same markup would yield +% \[ \thermounderline{F} +% = \thermounderline{U} - T\thermounderline{S} +% = -P\thermounderline{V} + \sum_i \mu_i N_i + \sigma d\thermounderline{A} +% \qquad H = U + PV +% \qquad \thermounderline{E} = \thermounderline{U} + \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 $\thermounderline{V},$ $V,$ $\hat V,$ and $\Vpm{j},$ +% respectively. +% +% 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} &= \left(\frac{\partial\thermounderline{H}} +% {\partial n_i}\right)_{T,P,n_{j\neq i}} +% = \left(\frac{\partial nH} +% {\partial n_i}\right)_{T,P,n_{j\neq i}} +% && \text{\texttt{intensive-plain}} \\ +% \Hpm{i} &= \left(\frac{\partial H} +% {\partial n_i}\right)_{T,P,n_{j\neq i}} +% = \left(\frac{\partial n\thermounderline{H}} +% {\partial n_i}\right)_{T,P,n_{j\neq i}} +% && \text{\texttt{extensive-plain}} \\ +% \Hpm{i} &= \left(\frac{\partial H^t} +% {\partial n_i}\right)_{T,P,n_{j\neq i}} +% = \left(\frac{\partial nH} +% {\partial n_i}\right)_{T,P,n_{j\neq i}} +% && \text{\texttt{extensive-superscript}} \\ +% \Hpm{i} &= \left(\frac{\partial H} +% {\partial n_i}\right)_{T,P,n_{j\neq i}} +% = \left(\frac{\partial nh} +% {\partial n_i}\right)_{T,P,n_{j\neq i}} +% && \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}, +% respectively. Note that specific quantities are generally assumed to +% look like the molar symbol with a caret on top.} +% \label{table:extensive} +% \centering\small +% \newcommand*{\vpm}[2][]{\mkern1mu\overline{\mkern-1mu v_{\mkern-2mu #2}^{#1}\mkern-2mu}\mkern2mu} +% \begin{tabular}{l l l l l l} +% \toprule +% Option & \verb"\Vt" & \verb"\Vm" & \verb"\Vs" & \verb"\Vpm_i" \\ +% \midrule +% \verb"intensive-plain" & $\thermounderline{V}$ & $V$ & $\hat V$ +% & $\Vpm{i}$ \\ +% \verb"extensive-plain" & $V$ & $\thermounderline{V}$ & $\hat V$ +% & $\Vpm{i}$\rule{0pt}{2.5ex} \\ +% \verb"extensive-superscript" & $V^t$ & $V$ & $\hat V$ +% & $\Vpm{i}$\rule{0pt}{2.5ex} \\ +% \verb"intensive-lowercase" & $V$ & $v$ & $\hat v$ +% & $\vpm{i}$\rule{0pt}{2.5ex} \\ +% \bottomrule +% \end{tabular} +% \end{table} +% +% \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 \verb"parentheses" option (the default), this gives +% \[ \left(\frac{\partial V}{\partial T}\right)_{P} \mkern-8mu +% = \left(\frac{\partial^2 G}{\partial T \partial P}\right) +% = \left(\frac{\partial^2 G}{\partial P \partial T}\right) +% = -\left(\frac{\partial S}{\partial P}\right)_{T}. \] +% The option \verb"brackets" changes the output to +% \[ \left[\frac{\partial V}{\partial T}\right]_{P} \mkern-8mu +% = \left[\frac{\partial^2 G}{\partial T \partial P}\right] +% = \left[\frac{\partial^2 G}{\partial P \partial T}\right] +% = -\left[\frac{\partial S}{\partial P}\right]_{T}. \] +% The option \verb"bar" changes the output to +% \[ \left.\frac{\partial V}{\partial T}\right\rvert_{P} \mkern-8mu +% = \left.\frac{\partial^2 G}{\partial T \partial P}\right. +% = \left.\frac{\partial^2 G}{\partial P \partial T}\right. +% = -\left.\frac{\partial S}{\partial P}\right\rvert_{T}. \] +% The option \verb"plain-derivatives" eliminates all delimiters; this forces +% the \verb"nosubscripts" option. The output in this case is +% \[ \left.\frac{\partial V(T,P)}{\partial T}\right. +% = \left.\frac{\partial^2 G(T,P)}{\partial T \partial P}\right. +% = \left.\frac{\partial^2 G(P,T)}{\partial P \partial T}\right. +% = -\left.\frac{\partial S(P,T)}{\partial P}\right. \] +% +% 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 +% \[ \left(\frac{\partial V}{\partial P}\right)_{T} +% \qquad \text{(\texttt{subscripts} option)}, \] +% and instead renders them +% \[ \left(\frac{\partial V(P,T)}{\partial P}\right) +% \qquad \text{(\texttt{nosubscripts} option)}. \] +% Combined with \verb"plain-derivatives", this would give +% \[ \left.\frac{\partial V(P,T)}{\partial P}\right. +% \qquad \text{(\texttt{nosubscripts} and \texttt{plain-derivatives} +% options)} . \] +% The order of the variables is determined by the arguments given: it is +% always written with the variable that is changing first, and the other +% variables in the order given in the final argument to \cs{Partial} and +% friends. This will result in things like the following: +% \begin{verbatim} +% \[ \Partial{\Vm}{T}{P} = \PartialMixSecond{\Gm}{T}{P}{} +% = \PartialMixSecond{\Gm}{P}{T}{} = -\Partial{\Sm}{P}{T}, \] +%\end{verbatim} +% which would produce (using \verb"plain-derivatives") +% \[ \frac{\partial V(T,P)}{\partial T} +% = \frac{\partial^2 G(T,P)}{\partial T\partial P} +% = \frac{\partial^2 G(P,T)}{\partial P\partial T} +% = - \frac{\partial S(P,T)}{\partial P} \] +% This is not unclear, but the variables appear in a different order. +% +% \DescribeEnv{thermoparentheses} +% \DescribeEnv{thermobrackets} +% \DescribeEnv{thermobar} +% \DescribeEnv{thermoplain} +% If you want to use parentheses \emph{locally}, even though your overall +% document uses another delimiter, the |thermoparentheses| environment will do +% that. Similarly, |thermobrackets| will temporarily switch to brackets, +% |thermobar| will temporarily switch to a tailing vertical bar, and +% |thermoplain| will remove delimiters altogether. +% +% \DescribeEnv{thermosubscripts} +% \DescribeEnv{thermoNOsubscripts} +% The environments |thermosubscripts| and |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 $\vec{n}$ and the macro \verb"\allNsbut{i}" to expand to $n_{j\neq i}$. +% You can change the dummy index: \verb"\allNsbut[k]{i}" expands to +% $n_{k\neq i}$ by default. This is typically not necessary, however: if you +% type \verb"\allNsbut{j}", the package will figure out that you want +% $\Nt_{k\neq j}$ rather than $\Nt_{j\neq j}$. The time to use the optional +% argument is in situations such as +% \[ \Partial{\mu_j}{\Nt_k}{\Nt_{i\neq 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 $n_1,\dotsc,n_C$ and \verb"\allNsbut{i}" +% as $n_1,\dotsc,[n_i],\dotsc,n_C$. The optional argument is ignored in this +% set of notation. Examples of these options are shown in +% Table~\ref{table:allNs}. +% +% \DescribeMacro{\ncomponents} +% You can change the symbol for the number of components (default: $C$) by +% redefining the macro \cs{ncomponents}. +% +% \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} +% \SpecialUsageIndex{\allNs}\relax +% \SpecialUsageIndex{\allNsbut}\relax +% \SpecialUsageIndex{\allXs}\relax +% \SpecialUsageIndex{\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 $C-1$ to $C-2$ (or, say, $M-1$ to +% $M-2$) if you want to redefine \cs{ncomponents} later.} +% & \verb"moles-index" & \verb"moles-range" \\ +% \midrule +% \verb"\allNs" & $\vec{n}$ & $n_1,\dotsc,n_C$ \\ +% \verb"\allNsbut{1}" & $n_{j\neq 1}$ & $n_2,\dotsc,n_C$ \\ +% \verb"\allNsbut{i}" & $n_{j\neq i}$ & $n_1,\dotsc,[n_i],\dotsc,n_C$ \\ +% \verb"\allNsbut{j}" & $n_{k\neq j}$ & $n_1,\dotsc,[n_j],\dotsc,n_C$ \\ +% \verb"\allNsbut{\ncomponents}" & $n_{j\neq C}$ & $n_1,\dotsc,n_{C-1}$ \\ +% \verb"\allNsbut[k]{i}" & $n_{k\neq i}$ & $n_1,\dotsc,[n_i],\dotsc,n_C$ \\ +% \verb"\allXs" & $\vec{x}$ & $x_1,\dotsc,x_{C}$ \\ +% \verb"\allXsbut{1}" & $x_{j\neq 1,C}$ & $x_2,\dotsc,x_{C-1}$ \\ +% \verb"\allXsbut{i}" & $x_{j\neq i,C}$ & $x_1,\dotsc,[x_i],\dotsc,x_{C-1}$ \\ +% \verb"\allXsbut{j}" & $x_{k\neq j,C}$ & $x_1,\dotsc,[x_j],\dotsc,x_{C-1}$ \\ +% \verb"\allXsbut{\ncomponents-1}" & $x_{j\neq C-1,C}$ & $x_1,\dotsc,x_{C-2}$ \\ +% \verb"\allXsbut[k]{\ncomponents-1}" & $x_{k\neq C-1,C}$ & $x_1,\dotsc,x_{C-2}$ \\ +% \verb"\allXsbut{\ncomponents}"\footnote{This would typically be used +% to denote something like $\Gt(T,P,n,x_1,\dotsc,x_{C-1})$ rather +% than in a subscript, but it looks silly if we don't handle this +% case this way.} +% & $x_{j\neq C}$ & $x_1,\dotsc,x_{C-1}$ \\ +% \bottomrule +% \end{tabular} +% \end{minipage} +% \end{table} +% +% \subsubsection{Other Options} +% \DescribeMacro{\dbar} +% \newcommand*{\dbar}{{\mkern5mu\mathchar'26\mkern-10mu d}}\relax +% 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 not very stable: 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 Specific Textbooks} +% There are several options that load package options and/or redefine +% particular commands to match the notation in a particular textbook. So far +% the following textbooks are supported: +% \begin{description} +% \item[Bejan] Notation used by Bejan, \emph{Advanced Engineering +% Thermodynamics}, Third Edition. Wiley: Hoboken, 2006. Loads non-default +% package options \verb"EUFGHAN", \verb"intensive-lowercase", and +% \verb"delta". Also swaps the definitions of \verb"\@specific" and +% \verb"\@intensive" and redefines \cs{cV}, \cs{cVs}, \cs{cVt}, +% \cs{expansivitysymbol}, and \cs{ncomponents} to match his notation. +% \item[CBK] Notation used by \c Cengel, Boles, and Kano\u glu, +% \emph{Thermodynamics: An Engineering Approach}, Ninth Edition. +% McGraw Hill: Singapore, 2020. Loads the non-default package options +% \verb"EUAGHAN" and \verb"intensive-lowercase"; also redefines +% partial molar, specific, and molar properties' notation to fit theirs, +% and redefines \cs{pressure@symbol}, \cs{Deltarxn}, +% \cs{compressibilitysymbol}, and \cs{expansivitysymbol} to fit their +% usage. Their prodigal symbols for specific and total volume are not +% supported. +% \item[ElliottLira] Notation used by Elliott and Lira, \emph{Introductory +% Chemical Engineering Thermodynamics}, Second Edition. Prentice Hall: +% Upper Saddle River, 2012. Loads the default package options and +% redefines \cs{allcomponents} and \cs{Deltarxn} to fit their notation. +% \item[Koretsky] Notation used by Koretsky, \emph{Engineering and Chemical +% Thermodynamics}, Second Edition, Wiley: New Caledonia, 2013. +% Loads the non-default package options \verb"EUAGHAn", \verb"brackets", +% \verb"intensive-lowercase", and \verb"delta"; modifies the +% \verb"intensive-lowercase" defaults to make uppercase partial molar +% properties to match Koretsky's notation and redefines +% \cs{expansivitysymbol}, \cs{IS}, \cs{residual}, \cs{IG}, \cs{IGM}, +% \cs{Deltafus}, \cs{Deltasub}, \cs{Deltavap}, \cs{Henryrat}, +% \cs{gammarat}, \cs{Deltafus}, \cs{Deltavap}, and \cs{Deltasub} to match +% his use. Also redefines the fugacity coefficients to use $\varphi$ +% instead of $\phi$. +% \item[MSBB] Notation used by Moran, Shapiro, Boettner, and Bailey, +% \emph{Fundamentals of Engineering Thermodynamics}, Eighth Edition. +% Wiley: Kendallville, 2014. Loads the non-default package options +% \verb"EUFGHAn", \verb"intensive-lowercase", and \verb"delta"; removes the +% left parenthesis in partial derivatives and redefines \cs{IGM}, \cs{IG}, +% \cs{expansitivitysymbol}, \cs{allcomponents}, \cs{allbut}, \cs{Ft}, +% \cs{Helmholtz@symbol}, \cs{@intensive}, \cs{@specific}, \cs{fmix}, +% \cs{phimix}, and \cs{pressure@symbol} to fit their somewhat ill-advised +% notation. Also resets \cs{partialmolar} to match their use. +% \item[Prausnitz] Notation used by Prausnitz, Lichtenthaler, and de Azevedo, +% \emph{Molecular Thermodynamics of Fluid-Phase Equilibria}, Third Edition, +% Pearson, 1998. Loads the non-default package option +% \verb"intensive-lowercase" and redefines \cs{fmix}, \cs{phimix}, +% \cs{fpure}, \cs{phipure}, \cs{residual}, \cs{allcomponents}, and +% \cs{allbut} to fit their notation. +% \item[Sandler] Notation used by Sandler, \emph{Chemical, Biochemical, and +% Engineering Thermodynamics}, Fifth Edition. Wiley: Hoboken, 2017. +% Loads non-default package options \verb"EUAGHaN" and +% \verb"extensive-plain"; also redefines \cs{sat}, \cs{excess}, +% \cs{residual}, \cs{ncomponents}, \cs{fmix}, \cs{fstd}, \cs{phimix}, +% \cs{allcomponents}, \cs{IS}, \cs{Deltamix}, \cs{Deltarxn}, \cs{Deltasub}, +% \cs{Deltafus}, \cs{Deltavap}, and \cs{Henryrat}. Also redefines \cs{cV}, +% \cs{cP}, \cs{cVt}, and \cs{cPt}. +% \item[SVNAS] Notation used by Smith, Van Ness, Abbott, and Swihart, +% \emph{Introduction to Chemical Engineering Thermodynamics}, Ninth +% Edition. McGraw-Hill: Boston, 2021. Loads the non-default package option +% \verb"extensive-superscript" and redefines \cs{allcomponents}, +% \cs{allbut}, \cs{IG}, \cs{IGM}, \cs{IS}, \cs{expansivitysymbol}, and +% \cs{Deltarxn} to fit their notation. The extensive heat capacities are +% also redefined, as they do not use such an entity. +% \item[TesterModell] Notation used by Tester and Modell, +% \emph{Thermodynamics and Its Applications}, Third Edition, Prentice Hall: +% Upper Saddle River, 1997. Loads the non-default package options +% \verb"EUAGHaN" and \verb"delta"; also redefines \cs{ncomponents} to be +% $n$ and redefines \cs{allcomponents}, \cs{allbut}, and \cs{allbutlastand} +% to fit their (somewhat inconsistent) notation. Also redefines \cs{IG}, +% \cs{IGM}, \cs{IS}, \cs{excess}, \cs{reaction}, \cs{Henryrat}, +% \cs{Henrymol}, \cs{gammarat}, and \cs{gammamol} to fit their style. +% \item[Thompson] Notation used by Thompson, \emph{A Unified Introduction to +% Chemical Engineering Thermodynamics}, Stillwater Press: Orono, 2000. +% Loads the non-default package options \verb"EUAGHAn" and \verb"delta"; +% also redefines \cs{excess}, \cs{residual}, \cs{allcomponents}, +% \cs{ncomponents}, \cs{IS}, \cs{IG}, \cs{IGM}, \cs{fpure}, \cs{phipure}, +% \cs{mix}, \cs{Deltamix}, \cs{Deltarxn}, \cs{@intensive}, and \cs{allbut} +% to match his notation. Note that he uses $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. +% +% \StopEventually{\PrintChanges\PrintIndex} +% +% ^^A-------------------------------------------------------------------------- +% \iffalse +%<*package> +% \fi +% +% \section{Implementation} +% This package requires the \verb"amstext" package, as \cs{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 \verb"lmodern"), +% Palatino (through \verb"pxfonts" or \verb"newpxmath"), +% Times (through \verb"txfonts", \verb"mathptmx", or \verb"newtxmath"), +% Utopia (through \verb"mathdesign"), +% Bitstream Charter (through \verb"mathdesign"), and +% Garamond (through \verb"mathdesign"). +% Definitions of \cs{dbar} (with \cs{newcommand*} or \cs{providecommand*}) +% in the preamble will override the ones here. +% \begin{macrocode} +\AtBeginDocument{ + \@ifpackageloaded{pxfonts}{% + \providecommand*{\dbar}{{\mkern5mu\mathchar'26\mkern-10mu d}}% + }{} + \@ifpackageloaded{newpxmath}{% + \providecommand*{\dbar}{{\mkern5mu\mathchar'26\mkern-10mu d}}% + }{} + \@ifpackageloaded{txfonts}{% + \providecommand*{\dbar}{{\mkern5mu\mathchar'26\mkern-11mu d}}% + }{} + \@ifpackageloaded{mathptmx}{% + \providecommand*{\dbar}{{\mkern5mu\mathchar'26\mkern-10mu d}}% + }{} + \@ifpackageloaded{newtxmath}{% + \providecommand*{\dbar}{{\mkern5mu\mathchar'26\mkern-12mu d}}% + }{} + \@ifpackageloaded{mathdesign}{% + \def\@charter{mdbch}% + \def\@utopia{mdput}% + \def\@garamond{mdugm}% + \ifx\MD@default@family\@utopia + \providecommand*{\dbar}{{\mkern8mu\mathchar'26\mkern-20mu d}}% + \fi + \ifx\MD@default@family\@charter + \providecommand*{\dbar}{{\mkern5mu\mathchar'26\mkern-15mu d}}% + \fi + \ifx\MD@default@family\@garamond + \providecommand*{\dbar}{{\mkern5mu\mathchar'26\mkern-17mu d}}% + \fi + }{} + % Defaults to Computer Modern + \providecommand*{\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, enthalpy, entropy, surface area, volume, number +% of moles, heat, and work; these are $E$, $U$, $A$, $G$, $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). +% +% \begin{macro}{\totalenergy@symbol} +% \begin{macro}{\internalenergy@symbol} +% \begin{macro}{\Helmholtz@symbol} +% \begin{macro}{\Gibbs@symbol} +% \begin{macro}{\Landau@symbol} +% \begin{macro}{\enthalpy@symbol} +% \begin{macro}{\entropy@symbol} +% \begin{macro}{\area@symbol} +% \begin{macro}{\volume@symbol} +% \begin{macro}{\mole@symbol} +% \begin{macro}{\heat@symbol} +% \begin{macro}{\work@symbol} +% \begin{macro}{\temperature@symbol} +% \begin{macro}{\pressure@symbol} +% 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 these macros inside +% \cs{makeatletter}\dots\cs{makeatother}. For example, +% \begin{verbatim} +% \makeatletter +% \renewcommand*{\Helmholtz@symbol}{H} +% \renewcommand*{\enthalpy@symbol}{h} +% \makeatother +%\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, expansivitites, 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} +\newcommand*{\totalenergy@symbol}{E} +\newcommand*{\internalenergy@symbol}{U} +\newcommand*{\Helmholtz@symbol}{A} +\newcommand*{\Gibbs@symbol}{G} +\newcommand*{\Landau@symbol}{\Omega} +\newcommand*{\enthalpy@symbol}{H} +\newcommand*{\entropy@symbol}{S} +\newcommand*{\area@symbol}{a} +\newcommand*{\volume@symbol}{V} +\newcommand*{\mole@symbol}{n} +\newcommand*{\heat@symbol}{Q} +\newcommand*{\work@symbol}{W} +\newcommand*{\temperature@symbol}{T} +\newcommand*{\pressure@symbol}{P} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\thermo@underline} +% \begin{macro}{\thermo@overline} +% We then define two macros 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 would work better as kern 0.1*width, symbol, kern 0.2*width +% \begin{macrocode} +\newcommand*{\thermo@underline}[1]{% + \mkern1mu\underline{\mkern-1mu #1\mkern-4mu}\mkern4mu% +} +\newcommand*{\thermo@overline}[1]{% + \mkern2mu\overline{\mkern-2mu #1\mkern-1mu}\mkern1mu% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\PartialOpen} +% \begin{macro}{\PartialClose} +% \begin{macro}{\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 \verb"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 \verb"bar" +% option to the document class or inside the \verb"thermobar" environment. +% \begin{macrocode} +\newcommand*{\PartialOpen}{(} +\newcommand*{\PartialClose}{)} +\newcommand*{\PartialEmptyClose}{)} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \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}. +% \begin{macrocode} +\DeclareOption{EUAGHan}{}% the default +\DeclareOption{EUAGHaN}{\renewcommand*{\mole@symbol}{N}}% +\DeclareOption{EUHAGan}{\ExecuteOptions{EUAGHan}} +\DeclareOption{EUHAGaN}{\ExecuteOptions{EUAGHaN}} +\DeclareOption{EUFGHAn}{% this is my favorite set of symbols + \renewcommand*{\Helmholtz@symbol}{F}% + \renewcommand*{\area@symbol}{A}% +} +\DeclareOption{EUFGHAN}{% this is my second favorite set of symbols + \renewcommand*{\Helmholtz@symbol}{F}% + \renewcommand*{\area@symbol}{A}% + \renewcommand*{\mole@symbol}{N}% +} +\DeclareOption{EEFGHAn}{% this treats all energy the same way(?) + \renewcommand*{\internalenergy@symbol}{E}% + \renewcommand*{\Helmholtz@symbol}{F}% + \renewcommand*{\area@symbol}{A}% +} +\DeclareOption{EEFGHAN}{% this treats all energy the same way(?) + \renewcommand*{\internalenergy@symbol}{E}% + \renewcommand*{\Helmholtz@symbol}{F}% + \renewcommand*{\area@symbol}{A}% + \renewcommand*{\mole@symbol}{N}% +} +\DeclareOption{EEFGHan}{% + \renewcommand*{\internalenergy@symbol}{E}% + \renewcommand*{\Helmholtz@symbol}{F} +} +\DeclareOption{EEFGHaN}{% + \renewcommand*{\internalenergy@symbol}{E}% + \renewcommand*{\Helmholtz@symbol}{F} + \renewcommand*{\mole@symbol}{N}% +} +\DeclareOption{EEAGHan}{% + \renewcommand*{\internalenergy@symbol}{E}% +} +\DeclareOption{EEAGHaN}{% + \renewcommand*{\internalenergy@symbol}{E}% + \renewcommand*{\mole@symbol}{N}% +} +\DeclareOption{EUAGHAn}{% Helmholtz free energy and area look the same here + \renewcommand*{\area@symbol}{A}% +} +\DeclareOption{EUAGHAN}{% Helmholtz free energy and area look the same here + \renewcommand*{\area@symbol}{A}% + \renewcommand*{\mole@symbol}{N}% +} +\DeclareOption{EUFGHan}{% + \renewcommand*{\Helmholtz@symbol}{F}% +} +\DeclareOption{EUFGHaN}{% + \renewcommand*{\Helmholtz@symbol}{F}% + \renewcommand*{\mole@symbol}{N}% +} +% \end{macrocode} +% The \verb"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}{\let\dbar\delta} +% \end{macrocode} +% +% \begin{macro}{\@extensive} +% \begin{macro}{\@intensive} +% \begin{macro}{\@specific} +% Next, we define options for the set of notation. The default is +% \verb"intensive-plain", which produces things like $V$ for molar volume, +% $\Vt$ for total volume, and $\hat V$ for specific volume. +% These are defined via the internal macros \verb"\@extensive", +% \verb"\@intensive", and \verb"\@specific". +% \begin{macrocode} +\let\@extensive\relax +\let\@intensive\relax +\let\@specific\hat +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macrocode} +\DeclareOption{extensive-plain}{% + \let\@extensive\relax + \let\@intensive\thermo@underline +} +\DeclareOption{intensive-plain}{% the default + \let\@extensive\thermo@underline + \let\@intensive\relax +} +\DeclareOption{intensive-lowercase}{% PLEASE don't use this! + \let\@extensive\MakeUppercase + \let\@intensive\MakeLowercase + \def\@specific#1{\MakeLowercase{\hat #1}} + \AtEndOfPackage{ + \renewcommand*{\partialmolar}[1]{% + \gdef\pm@symbol{\MakeLowercase #1}\generic@pm} + \renewcommand*{\heatcapacitysymbol}{c} + } +} +\DeclareOption{extensive-superscript}{% + \gdef\@extensive#1{{#1}^t}% + \let\@intensive\relax% + \AtEndOfPackage{% + \renewcommand*{\URt}{\internalenergy@symbol^{\residual,t}} + \renewcommand*{\HRt}{\enthalpy@symbol^{\residual,t}} + \renewcommand*{\FRt}{\Helmholtz@symbol^{\residual,t}} + \renewcommand*{\GRt}{\Gibbs@symbol^{\residual,t}} + \renewcommand*{\VRt}{\volume@symbol^{\residual,t}} + \renewcommand*{\SRt}{\entropy@symbol^{\residual,t}} + \renewcommand*{\UEt}{\internalenergy@symbol^{\excess,t}} + \renewcommand*{\HEt}{\enthalpy@symbol^{\excess,t}} + \renewcommand*{\FEt}{\Helmholtz@symbol^{\excess,t}} + \renewcommand*{\GEt}{\Gibbs@symbol^{\excess,t}} + \renewcommand*{\VEt}{\volume@symbol^{\excess,t}} + \renewcommand*{\SEt}{\entropy@symbol^{\excess,t}} + } +} +% \end{macrocode} +% +% The next two options choose whether variables held constant are subscripted +% (the default) or placed next to the function. The \verb"nosubscripts" +% option currently requires that the variable being changed is the first one +% in the argument list. The difference is +% \[ \left(\frac{\partial U}{\partial S}\right)_V \quad\text{versus}\quad +% \left(\frac{\partial U(S,V)}{\partial S}\right) \] +% for \verb"subscripts" and \verb"nosubscripts", respectively. +% \begin{macrocode} +\newif\if@subscripted +\@subscriptedtrue +\DeclareOption{subscripts}{\@subscriptedtrue} +\DeclareOption{nosubscripts}{\@subscriptedfalse} +% \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}{% + \renewcommand*{\PartialOpen}{[}% + \renewcommand*{\PartialClose}{]}% + \renewcommand*{\PartialEmptyClose}{]}% +} +\DeclareOption{braces}{% + \renewcommand*{\PartialOpen}{\{}% + \renewcommand*{\PartialClose}{\}}% + \renewcommand*{\PartialEmptyClose}{\}}% +} +\DeclareOption{bar}{% + \renewcommand*{\PartialOpen}{.}% + \renewcommand*{\PartialClose}{\rvert}% + \renewcommand*{\PartialEmptyClose}{.}% +} +\DeclareOption{plain-derivatives}{% This implies dU(S,V,N)/dS notation + \renewcommand*{\PartialOpen}{.}% + \renewcommand*{\PartialClose}{.}% + \renewcommand*{\PartialEmptyClose}{.}% + \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. +% \begin{macrocode} +\newcommand*{\ncomponents}{C} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\allNs} +% \begin{macro}{\allNsbut} +% \begin{macro}{\allMs} +% \begin{macro}{\allmus} +% \begin{macro}{\allMsbut} +% \begin{macro}{\allmusbut} +% 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} +\newcommand*{\allNs}{\allcomponents{\Nt}} +\newcommand*{\allXs}{\allcomponents{x}} +\newcommand*{\allYs}{\allcomponents{y}} +\newcommand*{\allmus}{\allcomponents{\mu}} +\newcommand*{\allMs}{\allcomponents{m}} +\newcommand*{\allWs}{\allcomponents{w}}% +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{\allXs} +% \begin{macro}{\allYs} +% \begin{macro}{\allWs} +% \begin{macro}{\allWsbut} +% \begin{macro}{\allXsbut} +% \begin{macro}{\allYsbut} +% 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} +\newcommand*{\allNsbut}[2][j]{\allbut[#1]{#2}{\Nt}} +\newcommand*{\allXsbut}[2][j]{\allbutlastand[#1]{#2}{x}} +\newcommand*{\allYsbut}[2][j]{\allbutlastand[#1]{#2}{y}} +\newcommand*{\allmusbut}[2][j]{\allbut[#1]{#2}{\mu}} +\newcommand*{\allMsbut}[2][j]{\allbut[#1]{#2}{m}} +\newcommand*{\allWsbut}[2][j]{\allbutlastand[#1]{#2}{w}}% +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{\allbutlastand} +% \begin{macro}{\allbut} +% \begin{macro}{\allcomponents} +% 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} +% \newcommand*{\allZsbut}[2][j]{\allbutlastand[#1]{#2}{z}} +%\end{verbatim} +% Similarly, something meaning the concentrations of every species could be +% defined via +% \begin{verbatim} +% \newcommand*{\allCs}{\allcomponents{C}} +%\end{verbatim} +% \begin{macrocode} +\newcommand*{\allcomponents}[1]{\vec{#1}} +\newcommand*{\allbut}[3][j]{% + \def\tmp@arg{#2}% + \def\tmp@@arg{#1}% + \ifx\tmp@arg\tmp@@arg + {#3}_{k\neq #2}% + \else + {#3}_{#1\neq #2}% + \fi +} +\newcommand*{\allbutlastand}[3][j]{% + \edef\tmp@arg{#1}% + \edef\tmp@@arg{#2}% + \ifx\tmp@@arg\ncomponents + {#3}_{#1 \neq #2}% + \else + \ifx\tmp@arg\tmp@@arg + {#3}_{k \neq #2,\ncomponents}% + \else + {#3}_{#1 \neq #2,\ncomponents}% + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% We then define two package options that change how to render \cs{allNs} and +% friends. +% \begin{macrocode} +\DeclareOption{moles-index}{} +\DeclareOption{moles-range}{% + \renewcommand*{\allcomponents}[1]{{#1}_1,\dots,{#1}_{\ncomponents}} + \renewcommand*{\allbut}[3][j]{% + \def\@one{1}% + \edef\tmp@arg{#2}% + \ifx\tmp@arg\@one + {#3}_2,\dots,{#3}_{\ncomponents}% + \else + \ifx\tmp@arg\ncomponents + {#3}_1,\dots,{#3}_{\ncomponents-1}% + \else + {#3}_1,\dots,[{#3}_{#2}],\dots,{#3}_{\ncomponents}% + \fi + \fi + } + \renewcommand*{\allbutlastand}[3][j]{% + \def\@one{1}% + \edef\tmp@arg{#2}% + \edef\@ncminusone{\ncomponents-1}% + \ifx\tmp@arg\@one + {#3}_2,\dots,{#3}_{\ncomponents-1}% + \else + \ifx\tmp@arg\@ncminusone + {#3}_1,\dots,{#3}_{\ncomponents-2}% + \else + \ifx\tmp@arg\ncomponents + {#3}_1,\dots,{#3}_{\ncomponents-1}% + \else + {#3}_1,\dots,[{#3}_{#2}],\dots,{#3}_{\ncomponents}% + \fi + \fi + \fi + } +} +% \end{macrocode} +% The remaining options define textbook-specific notation. +% \begin{macrocode} +\DeclareOption{Bejan}{ + \ExecuteOptions{EUFGHAN,intensive-lowercase,delta} + \let\@specific\MakeLowercase + \def\@intensive#1{\MakeLowercase{\bar #1}} + \AtEndOfPackage{ + \DeclareSubscrSymbol{cV}{\bar\heatcapacitysymbol}{v} + \DeclareSubscrSymbol{cVs}{\heatcapacitysymbol}{v} + \DeclareSubscrSymbol{cVt}{\Nt\heatcapacitysymbol}{v} + \renewcommand*{\expansivitysymbol}{\beta} + \renewcommand*{\ncomponents}{n} + } +} +\DeclareOption{CBK}{ + \ExecuteOptions{EUAGHAN,intensive-lowercase} + \AtEndOfPackage{ + \let\thermo@overline\widetilde + \let\@specific\MakeLowercase + \renewcommand*{\@intensive}[1]{\MakeLowercase{\bar{#1}}} + \renewcommand*{\pressure@symbol}{p} + \renewcommand*{\Deltarxn}[1]{#1_R} + \renewcommand*{\compressibilitysymbol}{\beta} + \renewcommand*{\expansivitysymbol}{\alpha} + } +} +\DeclareOption{ElliottLira}{ + \AtEndOfPackage{ + \renewcommand*{\allcomponents}[1]{#1} + \renewcommand*{\Deltarxn}[1]{\Delta #1} + } +} +\DeclareOption{Koretsky}{ + \ExecuteOptions{EUAGHAn,brackets,intensive-lowercase,delta} + \AtEndOfPackage{ + \renewcommand*{\partialmolar}[1]{\gdef\pm@symbol{#1}\generic@pm} + \renewcommand*{\expansivitysymbol}{\beta} + \renewcommand*{\IS}{{\text{ideal}}} + \renewcommand*{\residual}{{\text{dep}}} + \renewcommand*{\IG}{{\text{ideal}}} + \renewcommand*{\IGM}{{\text{ideal}}} + \renewcommand*{\Deltafus}[1]{\Delta{#1}_\fusion} + \renewcommand*{\Deltasub}[1]{\Delta{#1}_\sublimation} + \renewcommand*{\Deltavap}[1]{\Delta{#1}_\vaporization} + \renewcommand*{\Henryrat}{{\mathcal{H}}} + \renewcommand*{\gammarat}{\gamma^\text{Henry's}} + \let\phipure\varphi + \renewcommand*{\phimix}{\hat\varphi} + \renewcommand*{\phisat}{\varphi^\sat} + \let\Delta@fus@sym\relax + \DeclareSubscrSymbol{@Deltafus}{\Delta@fus@sym}{\fusion} + \renewcommand*{\Deltafus}[1]{\def\Delta@fus@sym{\Delta #1}\@Deltafus} + \let\Delta@vap@sym\relax + \DeclareSubscrSymbol{@Deltavap}{\Delta@vap@sym}{\vaporization} + \renewcommand*{\Deltasub}[1]{\def\Delta@sub@sym{\Delta #1}\@Deltasub} + \let\Delta@sub@sym\relax + \DeclareSubscrSymbol{@Deltasub}{\Delta@sub@sym}{\sublimation} + \renewcommand*{\Deltasub}[1]{\def\Delta@sub@sym{\Delta #1}\@Deltasub} + } +} +\DeclareOption{MSBB}{ + \ExecuteOptions{EUFGHAn,intensive-lowercase,delta} + \AtEndOfPackage{ + \renewcommand*{\IGM}{\ast} + \renewcommand*{\IG}{\ast} + \renewcommand*{\expansivitysymbol}{\beta} + \renewcommand*{\allcomponents}[1]{#1} + \renewcommand*{\allbut}[3][j]{% + \def\tmp@arg{#2}% + \def\tmp@@arg{#1}% + \ifx\tmp@arg\tmp@@arg + {#3}_{k}% + \else + {#3}_{#1}% + \fi + } + \let\Helmholtz@symbol\psi + \renewcommand*{\Ft}{\Psi} + \def\@intensive#1{\MakeLowercase{\thermo@overline #1}} + \let\@specific\MakeLowercase + \renewcommand*{\partialmolar}[1]{\gdef\pm@symbol{#1}\generic@pm} + \renewcommand*{\fmix}{\bar f} + \renewcommand*{\phimix}{\bar\phi} + \renewcommand*{\pressure@symbol}{p} + } +} +\DeclareOption{Prausnitz}{ + \ExecuteOptions{intensive-lowercase} + \AtEndOfPackage{ + \renewcommand*{\fmix}{f} + \let\phimix\phi + \renewcommand*{\fsat}{\fpure^\sat} + \DeclareSubscrSymbol{fpure}{f}{{\text{pure}}} + \DeclareSubscrSymbol{phipure}{\phi}{{\text{pure}}} + \renewcommand*{\residual}{{{\mathcal{R}}}} + \renewcommand*{\allcomponents}[1]{{#1}_i} + \renewcommand*{\allbut}[3][j]{% + \def\tmp@arg{#2}% + \def\tmp@@arg{#1}% + \ifx\tmp@arg\tmp@@arg + {#3}_{k}% + \else + {#3}_{#1}% + \fi + } + } +} +\DeclareOption{Sandler}{ + \ExecuteOptions{EUAGHaN,extensive-plain} + \AtEndOfPackage{ + \renewcommand*{\sat}{{\text{vap}}} + \renewcommand*{\excess}{{\text{{ex}}}} + \renewcommand*{\residual}{{\text{r}}} + \renewcommand*{\ncomponents}{\mathcal{C}} + \renewcommand*{\fmix}{\bar f} + \renewcommand*{\fstd}{\bar f^\circ} + \renewcommand*{\phimix}{\bar\phi} + \renewcommand*{\allcomponents}[1]{\thermo@underline{#1}} + \renewcommand*{\IG}{{\text{IG}}} + \renewcommand*{\IGM}{{\text{IGM}}} + \renewcommand*{\IS}{{\text{IM}}} + \renewcommand*{\Deltamix}[1]{\Delta_\mixing #1} + \renewcommand*{\Deltarxn}[1]{\Delta_\reaction #1} + \renewcommand*{\Deltasub}[1]{\Delta_\sublimation #1} + \renewcommand*{\Deltafus}[1]{\Delta_\fusion #1} + \renewcommand*{\Deltavap}[1]{\Delta_\vaporization #1} + \renewcommand*{\Henryrat}{H} + \DeclareSubscrSymbol{cV}{\heatcapacitysymbol}{\volume@symbol} + \DeclareSubscrSymbol{cP}{\heatcapacitysymbol}{\pressure@symbol} + \DeclareSubscrSymbol{cVt}{\Nt\heatcapacitysymbol}{\volume@symbol} + \DeclareSubscrSymbol{cPt}{\Nt\heatcapacitysymbol}{\pressure@symbol} + } +} +\DeclareOption{SVNAS}{ + \ExecuteOptions{extensive-superscript} + \AtEndOfPackage{ + \renewcommand*{\allcomponents}[1]{#1} + \renewcommand*{\allbut}[3][j]{% + \def\tmp@arg{#2}% + \def\tmp@@arg{#1}% + \ifx\tmp@arg\tmp@@arg + {#3}_{k}% + \else + {#3}_{#1}% + \fi + } + \renewcommand*{\IG}{{ig}} + \renewcommand*{\IGM}{{ig}} + \renewcommand*{\IS}{{id}} + \renewcommand*{\expansivitysymbol}{\beta} + \renewcommand*{\Deltarxn}[1]{\Delta #1} + \DeclareSubscrSymbol{cVt}{\Nt\heatcapacitysymbol}{\volume@symbol} + \DeclareSubscrSymbol{cPt}{\Nt\heatcapacitysymbol}{\pressure@symbol} + } +} +\DeclareOption{TesterModell}{ + \ExecuteOptions{EUAGHaN,delta} + \AtEndOfPackage{ + \renewcommand*{\ncomponents}{n} + \renewcommand*{\allcomponents}[1]{{#1}_i} + \renewcommand*{\allbut}[3][j]{% + \def\tmp@arg{#2}% + \def\tmp@@arg{#1}% + \ifx\tmp@arg\tmp@@arg + {#3}_k\relax[#2] + \else + {#3}_{#1}\relax[#2] + \fi + } + \renewcommand*{\allbutlastand}[3][j]{% + \edef\tmp@arg{#1}% + \edef\tmp@@arg{#2}% + \ifx\tmp@@arg\ncomponents + {#3}_{#1}\relax[#2]% + \else + \ifx\tmp@arg\tmp@@arg + {#3}\relax[#2,\ncomponents]% + \else + {#3}\relax[#2,\ncomponents]% + \fi + \fi + } + \renewcommand*{\IG}{{ig}} +% Tester & Modell never use "igm" anywhere, and I only found ig once + \renewcommand*{\IGM}{{igm}} + \renewcommand*{\IS}{{ID}} + \renewcommand*{\excess}{{EX}}% + \renewcommand*{\reaction}{{rx}} + \renewcommand*{\Henryrat}{f^{\ast\ast}} + \renewcommand*{\Henrymol}{f^\ast} + \renewcommand*{\gammarat}{\gamma^{\ast\ast}} + \renewcommand*{\gammamol}{\gamma^\ast} + } +} +\DeclareOption{Thompson}{ + \ExecuteOptions{EUAGHAn,delta} + \AtEndOfPackage{ + \renewcommand*{\excess}{{EX}} + \renewcommand*{\residual}{{R}} + \renewcommand*{\allcomponents}[1]{{#1}_j} + \renewcommand*{\ncomponents}{c} + \renewcommand*{\IS}{{IS}} + \renewcommand*{\IG}{{IG}} + \let\IGM\IG + \def\@fpure_#1{f_{#1}\@ifnextchar^{}{^\bullet}} + \renewcommand*{\fpure}{\@ifnextchar_{\@fpure}{f}} + \def\@phi@pure_#1{\phi_{#1}\@ifnextchar^{}{^\bullet}} + \renewcommand*{\phipure}{\@ifnextchar_{\@phi@pure}{\phi}} + \renewcommand*{\mixing}{{MIX}} + \renewcommand*{\Deltamix}[1]{\Delta_\mixing #1} + \renewcommand*{\Deltarxn}[1]{\Delta #1} + \def\@@intensive_#1{_{#1}\@ifnextchar^{}{^\bullet}} + \newcommand*{\@intensive}[1]{#1\@ifnextchar_{\@@intensive}{}} + \renewcommand*{\allbut}[3][j]{% + \def\tmp@arg{#2}% + \def\tmp@@arg{#1}% + \ifx\tmp@arg\tmp@@arg + {#3}_{k}\neq{#3}_{#2}% + \else + {#3}_{#1}\neq{#3}_{#2}% + \fi + } + } +} +% \end{macrocode} +% We execute the default options below. +% \begin{macrocode} +\ExecuteOptions{EUAGHan,subscripts,parentheses,intensive-plain,moles-index} +\ProcessOptions +% \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. +%^^A 3/1/2022: changed adjust@width to 2pt (up from 1pt) +%^^A 4/21/2022: changed adjust@width to 0.1\operator@width (from 2pt) +% \begin{macrocode} +\newlength{\Partial@const@width} +\newlength{\operator@width} +\settowidth{\operator@width}{=} +\newlength{\adjust@width} +\setlength{\adjust@width}{0.1\operator@width} +\addtolength{\operator@width}{\adjust@width} +% \end{macrocode} +% \begin{macro}{\Partial*} +% \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. +% \begin{macrocode} +\def\Partial@start{\left\PartialOpen} +\def\Partial@end{\right\PartialClose} +\def\Partial@empty@end{\right\PartialEmptyClose} +\def\Partial{\@ifstar\Partial@star\Partial@nostar} +%^^A Several ifs to use later (breaks it if these definitions are inside) +\newif\iftwo@has@Nt +\two@has@Ntfalse +\newif\iftwo@has@xory +\two@has@xoryfalse +\newif\ifthree@has@Nt +\three@has@Ntfalse +\newif\ifthree@has@xory +\three@has@xoryfalse +\AtEndOfPackage{% + \edef\thermo@Nt{\Nt}% + \edef\thermo@x{x}% + \edef\thermo@y{y}% +} +\def\thermo@parse@two#1\relax{% + \@tfor\@i:=#1\do{% + \edef\@@i{\@i}% + \ifx\@@i\thermo@Nt + \two@has@Nttrue + \@break@tfor + \fi + \ifx\@@i\thermo@x + \two@has@xorytrue + \@break@tfor + \fi + \ifx\@@i\thermo@y + \two@has@xorytrue + \@break@tfor + \fi + } +} +\newcommand*{\Partial@nostar}[3]{% + \def\tmp@arg{#3}% + \if@subscripted + % Handles situation of empty variables held constant + \ifx\tmp@arg\@empty + \ensuremath{\Partial@start\frac{\partial #1} + {\partial #2}\Partial@empty@end}% + \else + \ensuremath{\Partial@start\frac{\partial #1} + {\partial #2}\Partial@end_{#3}}% + \fi + \else + % If not subscripted, we put the arguments (if any) in the derivative + \ifx\tmp@arg\@empty + \ensuremath{\Partial@start\frac{\partial #1} + {\partial #2}\Partial@empty@end}% + \else + % Check for whether #3 contains \allNsbut{i}/etc. and #2 is \Nt_i/etc. + \thermo@parse@two#2\relax + \iftwo@has@Nt + \renewcommand*{\allbut}[3][j]{\allcomponents{##3}}% + \ensuremath{\Partial@start\frac{\partial #1(#3)} + {\partial #2}\Partial@end}% + \else + \iftwo@has@xory + \renewcommand*{\allbutlastand}[3][j]{\allbut{\ncomponents}{##3}}% + \ensuremath{\Partial@start\frac{\partial #1(#3)} + {\partial #2}\Partial@end}% + \else + \ensuremath{\Partial@start\frac{\partial #1(#2,#3)} + {\partial #2}\Partial@end}% + \fi + \fi + \fi + \fi +} +\newcommand*{\Partial@star}[3]{% + \settowidth{\Partial@const@width}{\ensuremath{#3}}% + \addtolength{\Partial@const@width}{-0.15\Partial@const@width}% + \Partial@nostar{#1}{#2}{#3}% + \if@subscripted + \ifdim\operator@width<\Partial@const@width + \kern -\operator@width + \else + \kern -\Partial@const@width + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\PartialBigg} +% \begin{macro}{\PartialBigg*} +% The \cs{PartialBigg} macro (and its starred form) replace the \cs{left} +% and \cs{right} commands in \cs{Partial} with \verb"amsmath"'s \cs{Biggl} +% and \cs{Biggr} variants. The starred form is inherited from \cs{Partial} +% without modification. +% \begin{macrocode} +\def\PartialBigg{% + \def\Partial@start{\Biggl\PartialOpen}% + \def\Partial@end{\Biggr\PartialClose}% + \def\Partial@empty@end{\Biggr\PartialClose}% + \Partial% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macro}{\Partialbigg} +% \begin{macro}{\Partialbigg*} +% The \cs{Partialbigg} macro does the same thing as \cs{PartialBigg}, except +% using \verb"amsmath"'s \cs{biggl}/\cs{biggr} variants. +% \begin{macrocode} +\def\Partialbigg{% + \def\Partial@start{\biggl\PartialOpen}% + \def\Partial@end{\biggr\PartialClose}% + \def\Partial@empty@end{\biggr\PartialClose}% + \Partial% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\PartialSecond} +% \begin{macro}{\PartialSecond*} +% The second partial derivatives are defined similarly to \cs{Partial}. +% \begin{macrocode} +\def\PartialSecond{\@ifstar\PartialSecond@star\PartialSecond@nostar} +\newcommand*{\PartialSecond@nostar}[3]{% + \def\tmp@arg{#3}% + \if@subscripted + % Handles situation of empty variables held constant + \ifx\tmp@arg\@empty + \ensuremath{\Partial@start\frac{\partial^2 #1} + {\partial #2^2}\Partial@empty@end}% + \else + \ensuremath{\Partial@start\frac{\partial^2 #1} + {\partial #2^2}\Partial@end_{#3}}% + \fi + \else + \ifx\tmp@arg\@empty + \ensuremath{\Partial@start\frac{\partial^2 #1} + {\partial #2^2}\Partial@empty@end}% + \else + % Check for whether #3 contains \allNsbut{i}/etc. and #2 is \Nt_i/etc. + \thermo@parse@two#2\relax + \iftwo@has@Nt + \renewcommand*{\allbut}[3][j]{\allcomponents{##3}}% + \ensuremath{\Partial@start\frac{\partial^2 #1(#3)} + {\partial #2^2}\Partial@end}% + \else + \iftwo@has@xory + \renewcommand*{\allbutlastand}[3][j]{\allbut{\ncomponents}{##3}}% + \ensuremath{\Partial@start\frac{\partial^2 #1(#3)} + {\partial #2^2}\Partial@end}% + \else + \ensuremath{\Partial@start\frac{\partial^2 #1(#2,#3)} + {\partial {#2}^2}\Partial@end}% + \fi + \fi + \fi + \fi +} +\newcommand*{\PartialSecond@star}[3]{% + \settowidth{\Partial@const@width}{\ensuremath{#3}}% + \addtolength{\Partial@const@width}{-0.15\Partial@const@width}% + \PartialSecond@nostar{#1}{#2}{#3}% + \if@subscripted + \ifdim\operator@width<\Partial@const@width + \kern -\operator@width + \else + \kern -\Partial@const@width + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macro}{\PartialSecondBigg} +% \begin{macro}{\PartialSecondBigg*} +% The \cs{PartialSecondBigg} macro and its starred variant replace \cs{left} +% and \cs{right} with \verb"amsmath"'s \cs{Biggl} and \cs{Biggr}. +% \begin{macrocode} +\def\PartialSecondBigg{% + \def\Partial@start{\expandafter\Biggl\PartialOpen}% + \def\Partial@end{\expandafter\Biggr\PartialClose}% + \PartialSecond% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macro}{\PartialSecondbigg} +% \begin{macro}{\PartialSecondbigg*} +% The \cs{PartialSecondbigg} macro and its starred variant replace \cs{left} +% and \cs{right} with \verb"amsmath"'s \cs{biggl} and \cs{biggr}. +% \begin{macrocode} +\def\PartialSecondbigg{% + \def\Partial@start{\expandafter\biggl\PartialOpen}% + \def\Partial@end{\expandafter\biggr\PartialClose}% + \PartialSecond% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\PartialMixSecond} +% \begin{macro}{\PartialMixSecond*} +% The macro \cs{PartialMixSecond} takes an extra argument, but is otherwise +% the same as its same-variable cousin. +% \begin{macrocode} +\def\PartialMixSecond{\@ifstar\PartialMixSecond@star\PartialMixSecond@nostar} +\newcommand*{\PartialMixSecond@nostar}[4]{% + \def\tmp@arg{#4}% + \if@subscripted + % Handles situation of empty variables held constant + \ifx\tmp@arg\@empty + \ensuremath{\Partial@start\frac{\partial^2 #1} + {\partial #2\partial#3}\Partial@empty@end}% + \else + \ensuremath{\Partial@start\frac{\partial^2 #1} + {\partial #2\partial#3}\Partial@end_{#4}}% + \fi + \else + \ifx\tmp@arg\@empty + \ensuremath{\Partial@start\frac{\partial^2 #1(#2,#3)} + {\partial #2\partial#3}\Partial@empty@end}% + \else + % This time, we check whether #2 OR #3 are \Nt_i/etc. + \thermo@parse@two#3\relax + \iftwo@has@Nt\three@has@Nttrue\fi + \iftwo@has@xory\three@has@xorytrue\fi + \two@has@Ntfalse + \two@has@xoryfalse + \thermo@parse@two#2\relax + \iftwo@has@Nt + \renewcommand*{\allbut}[3][j]{\allcomponents{##3}}% + \ensuremath{\Partial@start\frac{\partial^2 #1(#3,#4)} + {\partial #2\partial#3}\Partial@end}% + \else + \iftwo@has@xory + \renewcommand*{\allbutlastand}[3][j]{\allbut{\ncomponents}{##3}}% + \ensuremath{\Partial@start\frac{\partial^2 #1(#3,#4)} + {\partial #2\partial#3}\Partial@end}% + \else + \ifthree@has@Nt + \renewcommand*{\allbut}[3][j]{\allcomponents{##3}}% + \ensuremath{\Partial@start\frac{\partial^2 #1(#2,#4)} + {\partial #2\partial#3}\Partial@end}% + \else + \ifthree@has@xory + \PackageWarning{thermodynamics}{GOT HERE} + %\renewcommand*{\allbutlastand}[3][j]{\allbut{\ncomponents}{##3}}% + \renewcommand*{\allbutlastand}[3][j]{SCREW YOU}% + \ensuremath{\Partial@start\frac{\partial^2 #1(#2,#4)} + {\partial #2\partial#3}\Partial@end}% + \else + \ensuremath{\Partial@start\frac{\partial^2 #1(#2,#3,#4)} + {\partial #2\partial#3}\Partial@end}% + \fi + \fi + \fi + \fi + \fi + \fi +} +\newcommand*{\PartialMixSecond@star}[4]{% + \settowidth{\Partial@const@width}{\ensuremath{#4}}% + \addtolength{\Partial@const@width}{-0.25\Partial@const@width}% + \PartialMixSecond@nostar{#1}{#2}{#3}{#4}% + \if@subscripted + \ifdim\operator@width<\Partial@const@width + \kern -\operator@width + \else + \kern -\Partial@const@width + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macro}{\PartialMixSecondBigg} +% \begin{macro}{\PartialMixSecondBigg*} +% \begin{macro}{\PartialMixSecondbigg} +% \begin{macro}{\PartialMixSecondbigg*} +% The macro \cs{PartialMixSecondBigg} and its starred form are analogous to +% \cs{PartialBigg} and \cs{PartialSecondBigg}. \cs{PartialMixSecondbigg} and +% its starred form are similarly analogous to \cs{Partialbigg} and +% \cs{PartialSecondbigg}. +% \begin{macrocode} +\def\PartialMixSecondBigg{% + \def\Partial@start{\expandafter\Biggl\PartialOpen}% + \def\Partial@end{\expandafter\Biggr\PartialClose}% + \PartialMixSecond% +} +\def\PartialMixSecondbigg{% + \def\Partial@start{\expandafter\biggl\PartialOpen}% + \def\Partial@end{\expandafter\biggr\PartialClose}% + \PartialMixSecond% +} +% \end{macrocode} +% If the user does not load the \verb"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}% + \let\PartialBigg\Partial + \let\Partialbigg\Partial + \let\PartialSecondBigg\PartialSecond + \let\PartialSecondbigg\PartialSecond + \let\PartialMixSecondBigg\PartialMixSecond + \let\PartialMixSecondbigg\PartialMixSecond + }% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Local Override of Delimiters} +% \begin{environment}{thermoparentheses} +% \begin{environment}{thermobrackets} +% \begin{environment}{thermobraces} +% \begin{environment}{thermobar} +% \begin{environment}{thermoplain} +% We define seven environments that \emph{locally} override the delimiters on +% partial derivatives generated with \cs{Partial} and friends and/or the +% subscript notation for partial derivatives. +% \begin{macrocode} +\newenvironment*{thermoparentheses}{ + \renewcommand*{\PartialOpen}{(}% + \renewcommand*{\PartialClose}{)}% + \renewcommand*{\PartialEmptyClose}{)}% +}{} +\newenvironment*{thermobrackets}{% + \renewcommand*{\PartialOpen}{[}% + \renewcommand*{\PartialClose}{]}% + \renewcommand*{\PartialEmptyClose}{]}% +}{} +\newenvironment*{thermobraces}{% + \renewcommand*{\PartialOpen}{\{}% + \renewcommand*{\PartialClose}{\}}% + \renewcommand*{\PartialEmptyClose}{\}}% +}{} +\newenvironment*{thermobar}{% + \renewcommand*{\PartialOpen}{.}% + \renewcommand*{\PartialClose}{\rvert}% + \renewcommand*{\PartialEmptyClose}{.}% +}{} +\newenvironment*{thermoplain}{% + \renewcommand*{\PartialOpen}{.}% + \renewcommand*{\PartialClose}{.}% + \renewcommand*{\PartialEmptyClose}{.}% + \@subscriptedfalse +}{} +\newenvironment*{thermoNOsubscripts}{\@subscriptedfalse}{} +\newenvironment*{thermosubscripts}{\@subscriptedtrue}{} +% \end{macrocode} +% \end{environment} +% \end{environment} +% \end{environment} +% \end{environment} +% \end{environment} +% +% \subsection{User-Interface Macros to Define Symbols} +% \begin{macro}{\DeclareSubscrSymbol} +% First, we define a (messy!)\ 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. +% \begin{macrocode} +\newcommand*{\DeclareSubscrSymbol}[3]{% + \expandafter\def\csname #1\endcsname{% + \@ifnextchar^{\csname @#1\endcsname} + {\@ifnextchar_{\csname @@#1\endcsname}{{#2}_{#3}}} + } + \expandafter\def\csname @#1\endcsname ##1##2{% + {#2}^{##2}\@ifnextchar_{\csname @@@#1\endcsname}{_{#3}}% + } + \expandafter\def\csname @@#1\endcsname ##1##2{{#2}_{#3,##2}} + \expandafter\def\csname @@@#1\endcsname ##1##2{_{#3,##2}} +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\heatcapacitysymbol} +% \begin{macro}{\compressibilitysymbol} +% \begin{macro}{\expansivitysymbol} +% Now we define symbols for the heat capacities, compressibilities, and +% so forth. +% \begin{macrocode} +\newcommand*{\heatcapacitysymbol}{C} +\newcommand*{\compressibilitysymbol}{\kappa} +\newcommand*{\expansivitysymbol}{\alpha} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{\cV} +% \begin{macro}{\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} +\DeclareSubscrSymbol{cV}{\@intensive\heatcapacitysymbol}{\volume@symbol} +\DeclareSubscrSymbol{cP}{\@intensive\heatcapacitysymbol}{\pressure@symbol} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macro}{\cVt} +% \begin{macro}{\cPt} +% We also introduce \emph{extensive} (rather than molar) heat capacity macros. +% \begin{macrocode} +\DeclareSubscrSymbol{cVt}{\@extensive\heatcapacitysymbol}{\volume@symbol} +\DeclareSubscrSymbol{cPt}{\@extensive\heatcapacitysymbol}{\pressure@symbol} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macro}{\cPs} +% \begin{macro}{\cVs} +% \cs{cPs} and \cs{cVs} are the specific heat capacities. +% \begin{macrocode} +\DeclareSubscrSymbol{cVs}{\@specific\heatcapacitysymbol}{\volume@symbol} +\DeclareSubscrSymbol{cPs}{\@specific\heatcapacitysymbol}{\pressure@symbol} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\kappaT} +% \begin{macro}{\kappaS} +% The isothermal and adiabatic compressibilities are defined similarly, but +% those do not have extensive versions for obvious reasons. +% \begin{macrocode} +\DeclareSubscrSymbol{kappaT}{\compressibilitysymbol}{\temperature@symbol} +\DeclareSubscrSymbol{kappaS}{\compressibilitysymbol}{\entropy@symbol} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macro}{\alphaP} +% \begin{macro}{\alphaS} +% The macro \cs{alphaP} is intended to refer to the isobaric volume +% expansivity, while \cs{alphaS} is the isentropic volume expansivity. +% \begin{macrocode} +\DeclareSubscrSymbol{alphaP}{\expansivitysymbol}{\pressure@symbol} +\DeclareSubscrSymbol{alphaS}{\expansivitysymbol}{\entropy@symbol} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\Psat} +% \begin{macro}{\Pvap} +% The \cs{Psat} macro (and its clone, the \cs{Pvap} macro) should be used for +% the saturation pressure. +% \begin{macro}{\phisat} +% \begin{macro}{\fsat} +% \begin{macro}{\sat} +% 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} +\newcommand*{\sat}{{\text{sat}}} +\newcommand*{\Psat}{P^\sat} +\let\Pvap\Psat +\newcommand*{\phisat}{\phi^\sat} +\newcommand*{\fsat}{f^\sat} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{std} +% \begin{macro}{Pstd} +% \begin{macro}{fstd} +% The \cs{std} macro denotes standard properties. \cs{Pstd} and \cs{fstd} are +% defined for convenience and for consistency across textbooks. +% \begin{macrocode} +\let\std\circ +\newcommand*{\Pstd}{P^\std} +\newcommand*{\fstd}{f^\std} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\Deltamix} +% \begin{macro}{\mixing} +% Mixing properties, such as $\Delta G_\text{mix}$, should be accessed using +% \verb"\Deltamix\Gm" and similar constructions---this construct will typeset +% as $\Delta_{MIX}G$ using the \verb"Thompson" package option, for example, +% and as $\Delta_\text{mix}G$ using the \verb"Sandler" package option. +% \begin{macrocode} +\newcommand*{\mixing}{{\text{mix}}} +\newcommand*{\Deltamix}[1]{\Delta{#1}_\mixing} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\Deltafus} +% \begin{macro}{\fusion} +% \begin{macro}{\Deltavap} +% \begin{macro}{\vaporization} +% \begin{macro}{\Deltasub} +% \begin{macro}{\sublimation} +% \begin{macro}{\Deltarxn} +% \begin{macro}{\reaction} +% Similar entities for property changes on fusion, reaction, sublimation, and +% vaporization are defined. The heat of reaction is handled differently if +% \cs{cP} is its argument: one must typeset $\Delta C_{P,\text{rxn}}$ and +% $\Delta C_{P,\text{rxn}}^\circ$ rather than +% $\Delta{C_P}_\text{rxn}$ and $\Delta{C_P}^\circ_\text{rxn}$. +% \begin{macrocode} +\newcommand*{\fusion}{{\text{fus}}} +\newcommand*{\reaction}{{\text{rxn}}} +\newcommand*{\sublimation}{{\text{sub}}} +\newcommand*{\vaporization}{{\text{vap}}} +\newcommand*{\formation}{f} +\newcommand*{\Deltafus}[1]{\Delta{#1}^\fusion} +\newcommand*{\Deltasub}[1]{\Delta{#1}^\sublimation} +\newcommand*{\Deltavap}[1]{\Delta{#1}^\vaporization} +% TODO It would be nice not to have to handle \cP in a special way.... +\let\Delta@rxn@sym\relax +\DeclareSubscrSymbol{@DeltarxncP}{\Delta@rxn@sym}{\pressure@symbol,\reaction} +\DeclareSubscrSymbol{@Deltarxn}{\Delta@rxn@sym}{\reaction} +\newcommand*{\Deltarxn}[1]{% + \def\tmp@arg{#1}% + \def\tmp@@arg{\cP}% + \ifx\tmp@arg\tmp@@arg\relax + \def\@command{\def\Delta@rxn@sym{\Delta\@intensive\heatcapacitysymbol}% + \@DeltarxncP} + \else + \def\@command{\def\Delta@rxn@sym{\Delta{#1}}\@Deltarxn} + \fi + \@command +} +\let\Delta@f@sym\relax +\DeclareSubscrSymbol{@Deltaf}{\Delta@f@sym}{f} +\newcommand*{\Deltaf}[1]{\def\Delta@f@sym{\Delta{#1}}\@Deltaf} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \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} +\newcommand*{\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 the mixture. +% \begin{macrocode} +\newcommand*{\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} +\newcommand*{\fpure}{f} +\let\phipure\phi +% \end{macrocode} +% \end{macro} +% +% \subsection{Partial Molar Quantities} +% \begin{macro}{\partialmolar} +% Partial molar quantities appear as $\thermooverline{G_i}$ or, +% for residual properties, $\thermooverline{G_i^R}$, rather than something like +% $\thermooverline{G}_i$ or $\thermooverline{G}_i^R$, which 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} +\let\pm@symbol\relax +\newcommand*{\partialmolar}[1]{\gdef\pm@symbol{#1}\generic@pm} +% if nextchar is _ +\def\generic@pm{\@ifnextchar_\@generic@pm\@@generic@pm} +% then store the argument +\def\@generic@pm#1#2{% + \gdef\pm@arg{#2}% + % if nextchar after argument is ^ + \@ifnextchar^\@@@generic@pm\@@@@generic@pm +} +% then print it this way +\def\@@@generic@pm#1#2{\thermo@overline{\pm@symbol^{#2}_{\pm@arg}}} +% else do it this way +\def\@@@@generic@pm{\thermo@overline{\pm@symbol_{\pm@arg}}} +% else, check whether there is also a ^ coming, otherwise assume +% it's [] or {} +\def\@@generic@pm{\@ifnextchar^\@@@@@generic@pm\@pm@bracket@check} +\def\@@@@@generic@pm#1#2#3#4{\thermo@overline{\pm@symbol^{#2}_{#4}}} +\def\@pm@bracket@check{\@ifnextchar[\@pm@bracket@yes\@pm@bracket@no} +\def\@pm@bracket@yes[#1]#2{\thermo@overline{\pm@symbol^{#1}_{#2}}} +\def\@pm@bracket@no#1{\thermo@overline{\pm@symbol_{#1}}} +% \end{macrocode} +% \end{macro} +% +% \subsection{Symbol Definitions} +% These macros define the user interface to the symbols for energy, volume, +% and so forth. We define the ``extra'' symbols \cs{Bt} and \cs{Mt} to +% represent arbitrary properties. +% \begin{macro}{\Nt} +% \begin{macro}{\Et} +% \begin{macro}{\Ut} +% \begin{macro}{\Ft} +% \begin{macro}{\Gt} +% \begin{macro}{\Ht} +% \begin{macro}{\Lt} +% \begin{macro}{\At} +% \begin{macro}{\St} +% \begin{macro}{\Vt} +% \begin{macro}{\Qt} +% \begin{macro}{\Wt} +% \begin{macro}{\Mt} +% \begin{macro}{\Bt} +% \penalty-600% +% First, the extensive properties. +% \begin{macrocode} +\newcommand*{\Nt}{\mole@symbol} +\newcommand*{\Et}{\@extensive\totalenergy@symbol} +\newcommand*{\Ut}{\@extensive\internalenergy@symbol} +\newcommand*{\Ft}{\@extensive\Helmholtz@symbol} +\newcommand*{\Gt}{\@extensive\Gibbs@symbol} +\newcommand*{\Ht}{\@extensive\enthalpy@symbol} +\newcommand*{\Lt}{\@extensive\Landau@symbol} +\newcommand*{\At}{\@extensive\area@symbol} +\newcommand*{\St}{\@extensive\entropy@symbol} +\newcommand*{\Vt}{\@extensive\volume@symbol} +\newcommand*{\Qt}{\@extensive\heat@symbol} +\newcommand*{\Wt}{\@extensive\work@symbol} +\newcommand*{\Mt}{\@extensive M} +\newcommand*{\Bt}{\@extensive B} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\Em} +% \begin{macro}{\Um} +% \begin{macro}{\Fm} +% \begin{macro}{\Gm} +% \begin{macro}{\Hm} +% \begin{macro}{\Lm} +% \begin{macro}{\Am} +% \begin{macro}{\Sm} +% \begin{macro}{\Vm} +% \begin{macro}{\Qm} +%^^A \penalty-600% +% Then the molar properties. +% \begin{macrocode} +\newcommand*{\Em}{\@intensive\totalenergy@symbol} +\newcommand*{\Um}{\@intensive\internalenergy@symbol} +\newcommand*{\Fm}{\@intensive\Helmholtz@symbol} +\newcommand*{\Gm}{\@intensive\Gibbs@symbol} +\newcommand*{\Hm}{\@intensive\enthalpy@symbol} +\newcommand*{\Lm}{\@intensive\Landau@symbol} +\newcommand*{\Am}{\@intensive\area@symbol} +\newcommand*{\Sm}{\@intensive\entropy@symbol} +\newcommand*{\Vm}{\@intensive\volume@symbol} +\newcommand*{\Qm}{\@intensive\heat@symbol} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{\Wm} +% \begin{macro}{\Mm} +% \begin{macro}{\Bm} +% More molar properties. +% \begin{macrocode} +\newcommand*{\Wm}{\@intensive\work@symbol} +\newcommand*{\Mm}{\@intensive M} +\newcommand*{\Bm}{\@intensive B} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\Es} +% \begin{macro}{\Us} +% \begin{macro}{\Fs} +% \begin{macro}{\Gs} +% \begin{macro}{\Hs} +% \begin{macro}{\Ls} +% \begin{macro}{\As} +% \begin{macro}{\Ss} +% \begin{macro}{\Vs} +% \begin{macro}{\Qs} +% \begin{macro}{\Ws} +% \begin{macro}{\Ms} +% \begin{macro}{\Bs} +% \penalty-600% +% Now the specific (per unit mass) properties. +% \begin{macrocode} +\newcommand*{\Us}{\@specific\internalenergy@symbol} +\newcommand*{\Es}{\@specific\totalenergy@symbol} +\newcommand*{\Fs}{\@specific\Helmholtz@symbol} +\newcommand*{\Gs}{\@specific\Gibbs@symbol} +\newcommand*{\Hs}{\@specific\enthalpy@symbol} +\newcommand*{\Ls}{\@specific\Landau@symbol} +\newcommand*{\As}{\@specific\area@symbol} +\newcommand*{\Ss}{\@specific\entropy@symbol} +\newcommand*{\Vs}{\@specific\volume@symbol} +\newcommand*{\Qs}{\@specific\heat@symbol} +\newcommand*{\Ws}{\@specific\work@symbol} +\newcommand*{\Ms}{\@specific M} +\newcommand*{\Bs}{\@specific B} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\Epm} +% \begin{macro}{\Upm} +% \begin{macro}{\Hpm} +% \begin{macro}{\Fpm} +% \begin{macro}{\Gpm} +% \begin{macro}{\Apm} +% \begin{macro}{\Spm} +% \begin{macro}{\Vpm} +% \begin{macro}{\Lpm} +% \begin{macro}{\Mpm} +% \begin{macro}{\Bpm} +% Now the partial molar properties. +% \begin{macrocode} +\newcommand*{\Epm}{\partialmolar{\totalenergy@symbol}} +\newcommand*{\Upm}{\partialmolar{\internalenergy@symbol}} +\newcommand*{\Hpm}{\partialmolar{\enthalpy@symbol}} +\newcommand*{\Fpm}{\partialmolar{\Helmholtz@symbol}} +\newcommand*{\Gpm}{\partialmolar{\Gibbs@symbol}} +\newcommand*{\Apm}{\partialmolar{\area@symbol}} +\newcommand*{\Spm}{\partialmolar{\entropy@symbol}} +\newcommand*{\Vpm}{\partialmolar{\volume@symbol}} +\newcommand*{\Lpm}{\partialmolar{\Omega}} +\newcommand*{\Mpm}{\partialmolar{M}} +\newcommand*{\Bpm}{\partialmolar{B}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\cPpm} +% \begin{macro}{\cVpm} +% Partial molar heat capacities are \emph{hard}, but the following +% implementation seems to work flawlessly\dots so far. +% \begin{macrocode} +\newcommand*{\cPpm}{% + \def\@@@generic@pm##1##2{% + \thermo@overline{\pm@symbol^{##2}_{\pressure@symbol,\pm@arg}}}% + \def\@@@@generic@pm{\thermo@overline{\pm@symbol_{\pressure@symbol,\pm@arg}}}% + \def\@@@@@generic@pm##1##2##3##4{% + \thermo@overline{\pm@symbol^{##2}_{\pressure@symbol,##4}}}% + \def\@pm@bracket@yes[##1]##2{% + \thermo@overline{\pm@symbol^{##1}_{\pressure@symbol,##2}}}% + \def\@pm@bracket@no##1{\thermo@overline{\pm@symbol_{\pressure@symbol,##1}}}% + \partialmolar{\heatcapacitysymbol}% +} +\newcommand*{\cVpm}{% + \def\@@@generic@pm##1##2{% + \thermo@overline{\pm@symbol^{##2}_{\volume@symbol,\pm@arg}}}% + \def\@@@@generic@pm{\thermo@overline{\pm@symbol_{\volume@symbol,\pm@arg}}}% + \def\@@@@@generic@pm##1##2##3##4{% + \thermo@overline{\pm@symbol^{##2}_{\volume@symbol,##4}}}% + \def\@pm@bracket@yes[##1]##2{% + \thermo@overline{\pm@symbol^{##1}_{\volume@symbol,##2}}}% + \def\@pm@bracket@no##1{\thermo@overline{\pm@symbol_{\volume@symbol,##1}}}% + \partialmolar{\heatcapacitysymbol}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsection{Residual and Excess Properties} +% \begin{macro}{\residual} +% \begin{macro}{\excess} +% Macros are defined for residual properties (departure from non-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} +\newcommand*{\residual}{R} +\newcommand*{\excess}{E} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\UR} +% \begin{macro}{\HR} +% \begin{macro}{\FR} +% \begin{macro}{\GR} +% \begin{macro}{\VR} +% \begin{macro}{\SR} +% The ordinary residual properties are molar. +% \begin{macrocode} +\newcommand*{\UR}{\Um^\residual} +\newcommand*{\HR}{\Hm^\residual} +\newcommand*{\FR}{\Fm^\residual} +\newcommand*{\GR}{\Gm^\residual} +\newcommand*{\VR}{\Vm^\residual} +\newcommand*{\SR}{\Sm^\residual} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \pagebreak[3]% +% \begin{macro}{\URt} +% \begin{macro}{\HRt} +% \begin{macro}{\FRt} +% \begin{macro}{\GRt} +% \begin{macro}{\VRt} +% \begin{macro}{\SRt} +% We define similar macros for the extensive residual properties. These are +% appended by a \verb"t" (for ``total''). +% \begin{macrocode} +\newcommand*{\URt}{\Ut^\residual} +\newcommand*{\HRt}{\Ht^\residual} +\newcommand*{\FRt}{\Ft^\residual} +\newcommand*{\GRt}{\Gt^\residual} +\newcommand*{\VRt}{\Vt^\residual} +\newcommand*{\SRt}{\St^\residual} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\URs} +% \begin{macro}{\HRs} +% \begin{macro}{\FRs} +% \begin{macro}{\GRs} +% \begin{macro}{\VRs} +% \begin{macro}{\SRs} +% Similar macros are declared for the specific residual properties. +% These are appended by an \verb"s". +% \begin{macrocode} +\newcommand*{\URs}{\Us^\residual} +\newcommand*{\HRs}{\Hs^\residual} +\newcommand*{\FRs}{\Fs^\residual} +\newcommand*{\GRs}{\Gs^\residual} +\newcommand*{\VRs}{\Vs^\residual} +\newcommand*{\SRs}{\Ss^\residual} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \penalty-500 +% \begin{macro}{\URpm} +% \begin{macro}{\HRpm} +% \begin{macro}{\FRpm} +% \begin{macro}{\GRpm} +% \begin{macro}{\VRpm} +% \begin{macro}{\SRpm} +% Now for the partial molar residual properties. +% These are appended by \verb"pm". +% \begin{macrocode} +\newcommand*{\URpm}{\partialmolar{\internalenergy@symbol^\residual}} +\newcommand*{\HRpm}{\partialmolar{\enthalpy@symbol^\residual}} +\newcommand*{\FRpm}{\partialmolar{\Helmholtz@symbol^\residual}} +\newcommand*{\GRpm}{\partialmolar{\Gibbs@symbol^\residual}} +\newcommand*{\VRpm}{\partialmolar{\volume@symbol^\residual}} +\newcommand*{\SRpm}{\partialmolar{\entropy@symbol^\residual}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\UE} +% \begin{macro}{\HE} +% \begin{macro}{\FE} +% \begin{macro}{\GE} +% \begin{macro}{\VE} +% \begin{macro}{\SE} +% Now for the excess molar properties. +% \begin{macrocode} +\newcommand*{\UE}{\Um^\excess} +\newcommand*{\FE}{\Fm^\excess} +\newcommand*{\HE}{\Hm^\excess} +\newcommand*{\GE}{\Gm^\excess} +\newcommand*{\SE}{\Sm^\excess} +\newcommand*{\VE}{\Vm^\excess} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\UEt} +% \begin{macro}{\HEt} +% \begin{macro}{\FEt} +% \begin{macro}{\GEt} +% \begin{macro}{\VEt} +% \begin{macro}{\SEt} +% Similarly, the extensive excess properties. +% \begin{macrocode} +\newcommand*{\UEt}{\Ut^\excess} +\newcommand*{\FEt}{\Ft^\excess} +\newcommand*{\HEt}{\Ht^\excess} +\newcommand*{\GEt}{\Gt^\excess} +\newcommand*{\SEt}{\St^\excess} +\newcommand*{\VEt}{\Vt^\excess} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\UEs} +% \begin{macro}{\HEs} +% \begin{macro}{\FEs} +% \begin{macro}{\GEs} +% \begin{macro}{\VEs} +% \begin{macro}{\SEs} +% Now for the specific excess properties. +% \begin{macrocode} +\newcommand*{\UEs}{\Us^\excess} +\newcommand*{\FEs}{\Fs^\excess} +\newcommand*{\HEs}{\Hs^\excess} +\newcommand*{\GEs}{\Gs^\excess} +\newcommand*{\SEs}{\Ss^\excess} +\newcommand*{\VEs}{\Vs^\excess} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \pagebreak[3]% +% \begin{macro}{\UEpm} +% \begin{macro}{\HEpm} +% \begin{macro}{\FEpm} +% \begin{macro}{\GEpm} +% \begin{macro}{\VEpm} +% \begin{macro}{\SEpm} +% Finally, the excess partial molar quantities. +% \begin{macrocode} +\newcommand*{\UEpm}{\partialmolar{\internalenergy@symbol^\excess}} +\newcommand*{\HEpm}{\partialmolar{\enthalpy@symbol^\excess}} +\newcommand*{\FEpm}{\partialmolar{\Helmholtz@symbol^\excess}} +\newcommand*{\GEpm}{\partialmolar{\Gibbs@symbol^\excess}} +\newcommand*{\VEpm}{\partialmolar{\volume@symbol^\excess}} +\newcommand*{\SEpm}{\partialmolar{\entropy@symbol^\excess}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\prodall} +% \begin{macro}{\sumall} +% \begin{macro}{\sumallbutlast} +% The \cs{sumall} command 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 +% \[ \sum_{i=1}^C x_i = 1 \qquad \sum_{i=1}^{C-1} x_i = 1 - x_C \qquad +% K = \exp\left(\frac{-\Delta G_\text{rxn}^\circ}{RT}\right) +% = \prod_{i=1}^C a_i^{\nu_i} \] +% \begin{macrocode} +\newcommand*{\sumall}{\@ifnextchar_\@sumall\@@sumall} +\def\@sumall#1#2{\sum_{#2=1}^{\ncomponents}} +\def\@@sumall#1{\sum_{#1=1}^{\ncomponents}} +\newcommand*{\sumallbutlast}{\@ifnextchar_\@sumallbutlast\@@sumallbutlast} +\def\@sumallbutlast#1#2{\sum_{#2=1}^{\ncomponents-1}} +\def\@@sumallbutlast#1{\sum_{#1=1}^{\ncomponents-1}} +\newcommand*{\prodall}{\@ifnextchar_\@prodall\@@prodall} +\def\@prodall#1#2{\prod_{#2=1}^{\ncomponents}} +\def\@@prodall#1{\prod_{#1=1}^{\ncomponents}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\IG} +% \begin{macro}{\IGM} +% \begin{macro}{\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'' rather than ``IS'' +% for example. +% \begin{macrocode} +\newcommand*{\IG}{{\text{IG}}} +\newcommand*{\IGM}{{\text{IGM}}} +\newcommand*{\IS}{{\text{IS}}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\Henryrat} +% \begin{macro}{\Henrymol} +% 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} +\newcommand*{\Henryrat}{h} +\newcommand*{\Henrymol}{{\mathcal{H}}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\gammarat} +% \begin{macro}{\gammamol} +% The ordinary activity coefficient is universally denoted $\gamma$, so I +% have not defined a special macro for that. However, 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 (based on the \textsf{amsthm} +% package). +%^^A Code for \square ripped off from amsthm.sty with tweaks +% \begin{macrocode} +\AtBeginDocument{% + \providecommand*{\square}{% + \text{\leavevmode + \hbox to.77778em{% + \hfil\vrule + \vbox to.6em{\hrule width.6em\vfil\hrule}% + \vrule\hfil}% + }% + }% +} +\newcommand*{\gammarat}{\gamma^\ast} +\newcommand*{\gammamol}{\gamma^\square} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macro}{Jacobian} +% The \cs{Jacobian} command typesets the Jacobian, viz., +% \begin{verbatim} +% \[ \Jacobian{K}{L}{X}{Y} = +% \begin{vmatrix} +% \displaystyle \Partial{K}{X}{Y} & \displaystyle \Partial{K}{Y}{X} +% \\[2ex] +% \displaystyle \Partial{L}{X}{Y} & \displaystyle \Partial{L}{Y}{X} +% \end{vmatrix} +% \] +%\end{verbatim} +% produces +% \[ \left(\frac{\partial(K,L)}{\partial(X,Y)}\right) = +% \begin{vmatrix} +% \displaystyle \left(\frac{\partial K}{\partial X}\right)_Y +% & \displaystyle \left(\frac{\partial K}{\partial Y}\right)_X \\[2ex] +% \displaystyle \left(\frac{\partial L}{\partial X}\right)_Y +% & \displaystyle \left(\frac{\partial L}{\partial Y}\right)_X +% \end{vmatrix} +% \] +% This macro is defined purely for convenience. +% \begin{macrocode} +\newcommand*{\Jacobian}[4]{\frac{\partial{(#1,#2)}}{\partial{(#3,#4)}}}% +% \end{macrocode} +% \end{macro} +% +% \iffalse +%</package> +%<*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} +\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*} +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*} +\end{document} +%</example> +% \fi +% +% \Finale +\endinput diff --git a/Master/texmf-dist/source/latex/thermodynamics/thermodynamics.ins b/Master/texmf-dist/source/latex/thermodynamics/thermodynamics.ins new file mode 100644 index 00000000000..2e5ae9524fa --- /dev/null +++ b/Master/texmf-dist/source/latex/thermodynamics/thermodynamics.ins @@ -0,0 +1,73 @@ +%% File: thermodynamics.ins Copyright (C) 2021 Karl D. Hammond +%% +%% Karl D. Hammond, +%% Department of Chemical Engineering +%% 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 and thermodynamics.pdf. +%% \fi + +\input{docstrip} +\keepsilent +\usedir{tex/latex/thermodynamics} + +\preamble + +This is a generated file. + +Copyright (C) 2017-2018 by Karl D. Hammond + +Karl D. Hammond, +Department of Chemical Engineering +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. +\endpreamble + +\generate{% + \file{thermodynamics.sty}{\from{thermodynamics.dtx}{package}}% + \file{thermodynamics-examples.tex}{\from{thermodynamics.dtx}{example}}% +} + +\obeyspaces +\Msg{********************************************************************} +\Msg{* *} +\Msg{* To finish the installation you have to move the *} +\Msg{* following file into a directory searched by TeX: *} +\Msg{* *} +\Msg{* thermodynamics.sty *} +\Msg{* *} +\Msg{* To produce the documentation, run the following *} +\Msg{* commands: *} +\Msg{* pdflatex thermodynamics.dtx *} +\Msg{* makeindex -s gglo.ist -o thermodynamics.gls thermodynamics.glo *} +\Msg{* makeindex -s gind.ist -o thermodynamics.ind thermodynamics.idx *} +\Msg{* pdflatex thermodynamics.dtx *} +\Msg{* pdflatex thermodynamics.dtx *} +\Msg{* *} +\Msg{* Happy TeXing! *} +\Msg{* *} +\Msg{********************************************************************} + +\endbatchfile diff --git a/Master/texmf-dist/tex/latex/thermodynamics/thermodynamics.sty b/Master/texmf-dist/tex/latex/thermodynamics/thermodynamics.sty new file mode 100644 index 00000000000..5d121549971 --- /dev/null +++ b/Master/texmf-dist/tex/latex/thermodynamics/thermodynamics.sty @@ -0,0 +1,1005 @@ +%% +%% This is file `thermodynamics.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% thermodynamics.dtx (with options: `package') +%% +%% This is a generated file. +%% +%% Copyright (C) 2017-2018 by Karl D. Hammond +%% +%% Karl D. Hammond, +%% Department of Chemical Engineering +%% 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. +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{thermodynamics} + [2022/04/29 v1.00 thermodynamics package] +\RequirePackage{amstext} +\AtBeginDocument{ + \@ifpackageloaded{pxfonts}{% + \providecommand*{\dbar}{{\mkern5mu\mathchar'26\mkern-10mu d}}% + }{} + \@ifpackageloaded{newpxmath}{% + \providecommand*{\dbar}{{\mkern5mu\mathchar'26\mkern-10mu d}}% + }{} + \@ifpackageloaded{txfonts}{% + \providecommand*{\dbar}{{\mkern5mu\mathchar'26\mkern-11mu d}}% + }{} + \@ifpackageloaded{mathptmx}{% + \providecommand*{\dbar}{{\mkern5mu\mathchar'26\mkern-10mu d}}% + }{} + \@ifpackageloaded{newtxmath}{% + \providecommand*{\dbar}{{\mkern5mu\mathchar'26\mkern-12mu d}}% + }{} + \@ifpackageloaded{mathdesign}{% + \def\@charter{mdbch}% + \def\@utopia{mdput}% + \def\@garamond{mdugm}% + \ifx\MD@default@family\@utopia + \providecommand*{\dbar}{{\mkern8mu\mathchar'26\mkern-20mu d}}% + \fi + \ifx\MD@default@family\@charter + \providecommand*{\dbar}{{\mkern5mu\mathchar'26\mkern-15mu d}}% + \fi + \ifx\MD@default@family\@garamond + \providecommand*{\dbar}{{\mkern5mu\mathchar'26\mkern-17mu d}}% + \fi + }{} + % Defaults to Computer Modern + \providecommand*{\dbar}{{\mkern3mu\mathchar'26\mkern-12mu d}} +} +\newcommand*{\totalenergy@symbol}{E} +\newcommand*{\internalenergy@symbol}{U} +\newcommand*{\Helmholtz@symbol}{A} +\newcommand*{\Gibbs@symbol}{G} +\newcommand*{\Landau@symbol}{\Omega} +\newcommand*{\enthalpy@symbol}{H} +\newcommand*{\entropy@symbol}{S} +\newcommand*{\area@symbol}{a} +\newcommand*{\volume@symbol}{V} +\newcommand*{\mole@symbol}{n} +\newcommand*{\heat@symbol}{Q} +\newcommand*{\work@symbol}{W} +\newcommand*{\temperature@symbol}{T} +\newcommand*{\pressure@symbol}{P} +\newcommand*{\thermo@underline}[1]{% + \mkern1mu\underline{\mkern-1mu #1\mkern-4mu}\mkern4mu% +} +\newcommand*{\thermo@overline}[1]{% + \mkern2mu\overline{\mkern-2mu #1\mkern-1mu}\mkern1mu% +} +\newcommand*{\PartialOpen}{(} +\newcommand*{\PartialClose}{)} +\newcommand*{\PartialEmptyClose}{)} +\DeclareOption{EUAGHan}{}% the default +\DeclareOption{EUAGHaN}{\renewcommand*{\mole@symbol}{N}}% +\DeclareOption{EUHAGan}{\ExecuteOptions{EUAGHan}} +\DeclareOption{EUHAGaN}{\ExecuteOptions{EUAGHaN}} +\DeclareOption{EUFGHAn}{% this is my favorite set of symbols + \renewcommand*{\Helmholtz@symbol}{F}% + \renewcommand*{\area@symbol}{A}% +} +\DeclareOption{EUFGHAN}{% this is my second favorite set of symbols + \renewcommand*{\Helmholtz@symbol}{F}% + \renewcommand*{\area@symbol}{A}% + \renewcommand*{\mole@symbol}{N}% +} +\DeclareOption{EEFGHAn}{% this treats all energy the same way(?) + \renewcommand*{\internalenergy@symbol}{E}% + \renewcommand*{\Helmholtz@symbol}{F}% + \renewcommand*{\area@symbol}{A}% +} +\DeclareOption{EEFGHAN}{% this treats all energy the same way(?) + \renewcommand*{\internalenergy@symbol}{E}% + \renewcommand*{\Helmholtz@symbol}{F}% + \renewcommand*{\area@symbol}{A}% + \renewcommand*{\mole@symbol}{N}% +} +\DeclareOption{EEFGHan}{% + \renewcommand*{\internalenergy@symbol}{E}% + \renewcommand*{\Helmholtz@symbol}{F} +} +\DeclareOption{EEFGHaN}{% + \renewcommand*{\internalenergy@symbol}{E}% + \renewcommand*{\Helmholtz@symbol}{F} + \renewcommand*{\mole@symbol}{N}% +} +\DeclareOption{EEAGHan}{% + \renewcommand*{\internalenergy@symbol}{E}% +} +\DeclareOption{EEAGHaN}{% + \renewcommand*{\internalenergy@symbol}{E}% + \renewcommand*{\mole@symbol}{N}% +} +\DeclareOption{EUAGHAn}{% Helmholtz free energy and area look the same here + \renewcommand*{\area@symbol}{A}% +} +\DeclareOption{EUAGHAN}{% Helmholtz free energy and area look the same here + \renewcommand*{\area@symbol}{A}% + \renewcommand*{\mole@symbol}{N}% +} +\DeclareOption{EUFGHan}{% + \renewcommand*{\Helmholtz@symbol}{F}% +} +\DeclareOption{EUFGHaN}{% + \renewcommand*{\Helmholtz@symbol}{F}% + \renewcommand*{\mole@symbol}{N}% +} +\DeclareOption{delta}{\let\dbar\delta} +\let\@extensive\relax +\let\@intensive\relax +\let\@specific\hat +\DeclareOption{extensive-plain}{% + \let\@extensive\relax + \let\@intensive\thermo@underline +} +\DeclareOption{intensive-plain}{% the default + \let\@extensive\thermo@underline + \let\@intensive\relax +} +\DeclareOption{intensive-lowercase}{% PLEASE don't use this! + \let\@extensive\MakeUppercase + \let\@intensive\MakeLowercase + \def\@specific#1{\MakeLowercase{\hat #1}} + \AtEndOfPackage{ + \renewcommand*{\partialmolar}[1]{% + \gdef\pm@symbol{\MakeLowercase #1}\generic@pm} + \renewcommand*{\heatcapacitysymbol}{c} + } +} +\DeclareOption{extensive-superscript}{% + \gdef\@extensive#1{{#1}^t}% + \let\@intensive\relax% + \AtEndOfPackage{% + \renewcommand*{\URt}{\internalenergy@symbol^{\residual,t}} + \renewcommand*{\HRt}{\enthalpy@symbol^{\residual,t}} + \renewcommand*{\FRt}{\Helmholtz@symbol^{\residual,t}} + \renewcommand*{\GRt}{\Gibbs@symbol^{\residual,t}} + \renewcommand*{\VRt}{\volume@symbol^{\residual,t}} + \renewcommand*{\SRt}{\entropy@symbol^{\residual,t}} + \renewcommand*{\UEt}{\internalenergy@symbol^{\excess,t}} + \renewcommand*{\HEt}{\enthalpy@symbol^{\excess,t}} + \renewcommand*{\FEt}{\Helmholtz@symbol^{\excess,t}} + \renewcommand*{\GEt}{\Gibbs@symbol^{\excess,t}} + \renewcommand*{\VEt}{\volume@symbol^{\excess,t}} + \renewcommand*{\SEt}{\entropy@symbol^{\excess,t}} + } +} +\newif\if@subscripted +\@subscriptedtrue +\DeclareOption{subscripts}{\@subscriptedtrue} +\DeclareOption{nosubscripts}{\@subscriptedfalse} +\DeclareOption{parentheses}{} +\DeclareOption{brackets}{% + \renewcommand*{\PartialOpen}{[}% + \renewcommand*{\PartialClose}{]}% + \renewcommand*{\PartialEmptyClose}{]}% +} +\DeclareOption{braces}{% + \renewcommand*{\PartialOpen}{\{}% + \renewcommand*{\PartialClose}{\}}% + \renewcommand*{\PartialEmptyClose}{\}}% +} +\DeclareOption{bar}{% + \renewcommand*{\PartialOpen}{.}% + \renewcommand*{\PartialClose}{\rvert}% + \renewcommand*{\PartialEmptyClose}{.}% +} +\DeclareOption{plain-derivatives}{% This implies dU(S,V,N)/dS notation + \renewcommand*{\PartialOpen}{.}% + \renewcommand*{\PartialClose}{.}% + \renewcommand*{\PartialEmptyClose}{.}% + \ExecuteOptions{nosubscripts}% +} +\newcommand*{\ncomponents}{C} +\newcommand*{\allNs}{\allcomponents{\Nt}} +\newcommand*{\allXs}{\allcomponents{x}} +\newcommand*{\allYs}{\allcomponents{y}} +\newcommand*{\allmus}{\allcomponents{\mu}} +\newcommand*{\allMs}{\allcomponents{m}} +\newcommand*{\allWs}{\allcomponents{w}}% +\newcommand*{\allNsbut}[2][j]{\allbut[#1]{#2}{\Nt}} +\newcommand*{\allXsbut}[2][j]{\allbutlastand[#1]{#2}{x}} +\newcommand*{\allYsbut}[2][j]{\allbutlastand[#1]{#2}{y}} +\newcommand*{\allmusbut}[2][j]{\allbut[#1]{#2}{\mu}} +\newcommand*{\allMsbut}[2][j]{\allbut[#1]{#2}{m}} +\newcommand*{\allWsbut}[2][j]{\allbutlastand[#1]{#2}{w}}% +\newcommand*{\allcomponents}[1]{\vec{#1}} +\newcommand*{\allbut}[3][j]{% + \def\tmp@arg{#2}% + \def\tmp@@arg{#1}% + \ifx\tmp@arg\tmp@@arg + {#3}_{k\neq #2}% + \else + {#3}_{#1\neq #2}% + \fi +} +\newcommand*{\allbutlastand}[3][j]{% + \edef\tmp@arg{#1}% + \edef\tmp@@arg{#2}% + \ifx\tmp@@arg\ncomponents + {#3}_{#1 \neq #2}% + \else + \ifx\tmp@arg\tmp@@arg + {#3}_{k \neq #2,\ncomponents}% + \else + {#3}_{#1 \neq #2,\ncomponents}% + \fi + \fi +} +\DeclareOption{moles-index}{} +\DeclareOption{moles-range}{% + \renewcommand*{\allcomponents}[1]{{#1}_1,\dots,{#1}_{\ncomponents}} + \renewcommand*{\allbut}[3][j]{% + \def\@one{1}% + \edef\tmp@arg{#2}% + \ifx\tmp@arg\@one + {#3}_2,\dots,{#3}_{\ncomponents}% + \else + \ifx\tmp@arg\ncomponents + {#3}_1,\dots,{#3}_{\ncomponents-1}% + \else + {#3}_1,\dots,[{#3}_{#2}],\dots,{#3}_{\ncomponents}% + \fi + \fi + } + \renewcommand*{\allbutlastand}[3][j]{% + \def\@one{1}% + \edef\tmp@arg{#2}% + \edef\@ncminusone{\ncomponents-1}% + \ifx\tmp@arg\@one + {#3}_2,\dots,{#3}_{\ncomponents-1}% + \else + \ifx\tmp@arg\@ncminusone + {#3}_1,\dots,{#3}_{\ncomponents-2}% + \else + \ifx\tmp@arg\ncomponents + {#3}_1,\dots,{#3}_{\ncomponents-1}% + \else + {#3}_1,\dots,[{#3}_{#2}],\dots,{#3}_{\ncomponents}% + \fi + \fi + \fi + } +} +\DeclareOption{Bejan}{ + \ExecuteOptions{EUFGHAN,intensive-lowercase,delta} + \let\@specific\MakeLowercase + \def\@intensive#1{\MakeLowercase{\bar #1}} + \AtEndOfPackage{ + \DeclareSubscrSymbol{cV}{\bar\heatcapacitysymbol}{v} + \DeclareSubscrSymbol{cVs}{\heatcapacitysymbol}{v} + \DeclareSubscrSymbol{cVt}{\Nt\heatcapacitysymbol}{v} + \renewcommand*{\expansivitysymbol}{\beta} + \renewcommand*{\ncomponents}{n} + } +} +\DeclareOption{CBK}{ + \ExecuteOptions{EUAGHAN,intensive-lowercase} + \AtEndOfPackage{ + \let\thermo@overline\widetilde + \let\@specific\MakeLowercase + \renewcommand*{\@intensive}[1]{\MakeLowercase{\bar{#1}}} + \renewcommand*{\pressure@symbol}{p} + \renewcommand*{\Deltarxn}[1]{#1_R} + \renewcommand*{\compressibilitysymbol}{\beta} + \renewcommand*{\expansivitysymbol}{\alpha} + } +} +\DeclareOption{ElliottLira}{ + \AtEndOfPackage{ + \renewcommand*{\allcomponents}[1]{#1} + \renewcommand*{\Deltarxn}[1]{\Delta #1} + } +} +\DeclareOption{Koretsky}{ + \ExecuteOptions{EUAGHAn,brackets,intensive-lowercase,delta} + \AtEndOfPackage{ + \renewcommand*{\partialmolar}[1]{\gdef\pm@symbol{#1}\generic@pm} + \renewcommand*{\expansivitysymbol}{\beta} + \renewcommand*{\IS}{{\text{ideal}}} + \renewcommand*{\residual}{{\text{dep}}} + \renewcommand*{\IG}{{\text{ideal}}} + \renewcommand*{\IGM}{{\text{ideal}}} + \renewcommand*{\Deltafus}[1]{\Delta{#1}_\fusion} + \renewcommand*{\Deltasub}[1]{\Delta{#1}_\sublimation} + \renewcommand*{\Deltavap}[1]{\Delta{#1}_\vaporization} + \renewcommand*{\Henryrat}{{\mathcal{H}}} + \renewcommand*{\gammarat}{\gamma^\text{Henry's}} + \let\phipure\varphi + \renewcommand*{\phimix}{\hat\varphi} + \renewcommand*{\phisat}{\varphi^\sat} + \let\Delta@fus@sym\relax + \DeclareSubscrSymbol{@Deltafus}{\Delta@fus@sym}{\fusion} + \renewcommand*{\Deltafus}[1]{\def\Delta@fus@sym{\Delta #1}\@Deltafus} + \let\Delta@vap@sym\relax + \DeclareSubscrSymbol{@Deltavap}{\Delta@vap@sym}{\vaporization} + \renewcommand*{\Deltasub}[1]{\def\Delta@sub@sym{\Delta #1}\@Deltasub} + \let\Delta@sub@sym\relax + \DeclareSubscrSymbol{@Deltasub}{\Delta@sub@sym}{\sublimation} + \renewcommand*{\Deltasub}[1]{\def\Delta@sub@sym{\Delta #1}\@Deltasub} + } +} +\DeclareOption{MSBB}{ + \ExecuteOptions{EUFGHAn,intensive-lowercase,delta} + \AtEndOfPackage{ + \renewcommand*{\IGM}{\ast} + \renewcommand*{\IG}{\ast} + \renewcommand*{\expansivitysymbol}{\beta} + \renewcommand*{\allcomponents}[1]{#1} + \renewcommand*{\allbut}[3][j]{% + \def\tmp@arg{#2}% + \def\tmp@@arg{#1}% + \ifx\tmp@arg\tmp@@arg + {#3}_{k}% + \else + {#3}_{#1}% + \fi + } + \let\Helmholtz@symbol\psi + \renewcommand*{\Ft}{\Psi} + \def\@intensive#1{\MakeLowercase{\thermo@overline #1}} + \let\@specific\MakeLowercase + \renewcommand*{\partialmolar}[1]{\gdef\pm@symbol{#1}\generic@pm} + \renewcommand*{\fmix}{\bar f} + \renewcommand*{\phimix}{\bar\phi} + \renewcommand*{\pressure@symbol}{p} + } +} +\DeclareOption{Prausnitz}{ + \ExecuteOptions{intensive-lowercase} + \AtEndOfPackage{ + \renewcommand*{\fmix}{f} + \let\phimix\phi + \renewcommand*{\fsat}{\fpure^\sat} + \DeclareSubscrSymbol{fpure}{f}{{\text{pure}}} + \DeclareSubscrSymbol{phipure}{\phi}{{\text{pure}}} + \renewcommand*{\residual}{{{\mathcal{R}}}} + \renewcommand*{\allcomponents}[1]{{#1}_i} + \renewcommand*{\allbut}[3][j]{% + \def\tmp@arg{#2}% + \def\tmp@@arg{#1}% + \ifx\tmp@arg\tmp@@arg + {#3}_{k}% + \else + {#3}_{#1}% + \fi + } + } +} +\DeclareOption{Sandler}{ + \ExecuteOptions{EUAGHaN,extensive-plain} + \AtEndOfPackage{ + \renewcommand*{\sat}{{\text{vap}}} + \renewcommand*{\excess}{{\text{{ex}}}} + \renewcommand*{\residual}{{\text{r}}} + \renewcommand*{\ncomponents}{\mathcal{C}} + \renewcommand*{\fmix}{\bar f} + \renewcommand*{\fstd}{\bar f^\circ} + \renewcommand*{\phimix}{\bar\phi} + \renewcommand*{\allcomponents}[1]{\thermo@underline{#1}} + \renewcommand*{\IG}{{\text{IG}}} + \renewcommand*{\IGM}{{\text{IGM}}} + \renewcommand*{\IS}{{\text{IM}}} + \renewcommand*{\Deltamix}[1]{\Delta_\mixing #1} + \renewcommand*{\Deltarxn}[1]{\Delta_\reaction #1} + \renewcommand*{\Deltasub}[1]{\Delta_\sublimation #1} + \renewcommand*{\Deltafus}[1]{\Delta_\fusion #1} + \renewcommand*{\Deltavap}[1]{\Delta_\vaporization #1} + \renewcommand*{\Henryrat}{H} + \DeclareSubscrSymbol{cV}{\heatcapacitysymbol}{\volume@symbol} + \DeclareSubscrSymbol{cP}{\heatcapacitysymbol}{\pressure@symbol} + \DeclareSubscrSymbol{cVt}{\Nt\heatcapacitysymbol}{\volume@symbol} + \DeclareSubscrSymbol{cPt}{\Nt\heatcapacitysymbol}{\pressure@symbol} + } +} +\DeclareOption{SVNAS}{ + \ExecuteOptions{extensive-superscript} + \AtEndOfPackage{ + \renewcommand*{\allcomponents}[1]{#1} + \renewcommand*{\allbut}[3][j]{% + \def\tmp@arg{#2}% + \def\tmp@@arg{#1}% + \ifx\tmp@arg\tmp@@arg + {#3}_{k}% + \else + {#3}_{#1}% + \fi + } + \renewcommand*{\IG}{{ig}} + \renewcommand*{\IGM}{{ig}} + \renewcommand*{\IS}{{id}} + \renewcommand*{\expansivitysymbol}{\beta} + \renewcommand*{\Deltarxn}[1]{\Delta #1} + \DeclareSubscrSymbol{cVt}{\Nt\heatcapacitysymbol}{\volume@symbol} + \DeclareSubscrSymbol{cPt}{\Nt\heatcapacitysymbol}{\pressure@symbol} + } +} +\DeclareOption{TesterModell}{ + \ExecuteOptions{EUAGHaN,delta} + \AtEndOfPackage{ + \renewcommand*{\ncomponents}{n} + \renewcommand*{\allcomponents}[1]{{#1}_i} + \renewcommand*{\allbut}[3][j]{% + \def\tmp@arg{#2}% + \def\tmp@@arg{#1}% + \ifx\tmp@arg\tmp@@arg + {#3}_k\relax[#2] + \else + {#3}_{#1}\relax[#2] + \fi + } + \renewcommand*{\allbutlastand}[3][j]{% + \edef\tmp@arg{#1}% + \edef\tmp@@arg{#2}% + \ifx\tmp@@arg\ncomponents + {#3}_{#1}\relax[#2]% + \else + \ifx\tmp@arg\tmp@@arg + {#3}\relax[#2,\ncomponents]% + \else + {#3}\relax[#2,\ncomponents]% + \fi + \fi + } + \renewcommand*{\IG}{{ig}} + \renewcommand*{\IGM}{{igm}} + \renewcommand*{\IS}{{ID}} + \renewcommand*{\excess}{{EX}}% + \renewcommand*{\reaction}{{rx}} + \renewcommand*{\Henryrat}{f^{\ast\ast}} + \renewcommand*{\Henrymol}{f^\ast} + \renewcommand*{\gammarat}{\gamma^{\ast\ast}} + \renewcommand*{\gammamol}{\gamma^\ast} + } +} +\DeclareOption{Thompson}{ + \ExecuteOptions{EUAGHAn,delta} + \AtEndOfPackage{ + \renewcommand*{\excess}{{EX}} + \renewcommand*{\residual}{{R}} + \renewcommand*{\allcomponents}[1]{{#1}_j} + \renewcommand*{\ncomponents}{c} + \renewcommand*{\IS}{{IS}} + \renewcommand*{\IG}{{IG}} + \let\IGM\IG + \def\@fpure_#1{f_{#1}\@ifnextchar^{}{^\bullet}} + \renewcommand*{\fpure}{\@ifnextchar_{\@fpure}{f}} + \def\@phi@pure_#1{\phi_{#1}\@ifnextchar^{}{^\bullet}} + \renewcommand*{\phipure}{\@ifnextchar_{\@phi@pure}{\phi}} + \renewcommand*{\mixing}{{MIX}} + \renewcommand*{\Deltamix}[1]{\Delta_\mixing #1} + \renewcommand*{\Deltarxn}[1]{\Delta #1} + \def\@@intensive_#1{_{#1}\@ifnextchar^{}{^\bullet}} + \newcommand*{\@intensive}[1]{#1\@ifnextchar_{\@@intensive}{}} + \renewcommand*{\allbut}[3][j]{% + \def\tmp@arg{#2}% + \def\tmp@@arg{#1}% + \ifx\tmp@arg\tmp@@arg + {#3}_{k}\neq{#3}_{#2}% + \else + {#3}_{#1}\neq{#3}_{#2}% + \fi + } + } +} +\ExecuteOptions{EUAGHan,subscripts,parentheses,intensive-plain,moles-index} +\ProcessOptions +\newlength{\Partial@const@width} +\newlength{\operator@width} +\settowidth{\operator@width}{=} +\newlength{\adjust@width} +\setlength{\adjust@width}{0.1\operator@width} +\addtolength{\operator@width}{\adjust@width} +\def\Partial@start{\left\PartialOpen} +\def\Partial@end{\right\PartialClose} +\def\Partial@empty@end{\right\PartialEmptyClose} +\def\Partial{\@ifstar\Partial@star\Partial@nostar} +\newif\iftwo@has@Nt +\two@has@Ntfalse +\newif\iftwo@has@xory +\two@has@xoryfalse +\newif\ifthree@has@Nt +\three@has@Ntfalse +\newif\ifthree@has@xory +\three@has@xoryfalse +\AtEndOfPackage{% + \edef\thermo@Nt{\Nt}% + \edef\thermo@x{x}% + \edef\thermo@y{y}% +} +\def\thermo@parse@two#1\relax{% + \@tfor\@i:=#1\do{% + \edef\@@i{\@i}% + \ifx\@@i\thermo@Nt + \two@has@Nttrue + \@break@tfor + \fi + \ifx\@@i\thermo@x + \two@has@xorytrue + \@break@tfor + \fi + \ifx\@@i\thermo@y + \two@has@xorytrue + \@break@tfor + \fi + } +} +\newcommand*{\Partial@nostar}[3]{% + \def\tmp@arg{#3}% + \if@subscripted + % Handles situation of empty variables held constant + \ifx\tmp@arg\@empty + \ensuremath{\Partial@start\frac{\partial #1} + {\partial #2}\Partial@empty@end}% + \else + \ensuremath{\Partial@start\frac{\partial #1} + {\partial #2}\Partial@end_{#3}}% + \fi + \else + % If not subscripted, we put the arguments (if any) in the derivative + \ifx\tmp@arg\@empty + \ensuremath{\Partial@start\frac{\partial #1} + {\partial #2}\Partial@empty@end}% + \else + % Check for whether #3 contains \allNsbut{i}/etc. and #2 is \Nt_i/etc. + \thermo@parse@two#2\relax + \iftwo@has@Nt + \renewcommand*{\allbut}[3][j]{\allcomponents{##3}}% + \ensuremath{\Partial@start\frac{\partial #1(#3)} + {\partial #2}\Partial@end}% + \else + \iftwo@has@xory + \renewcommand*{\allbutlastand}[3][j]{\allbut{\ncomponents}{##3}}% + \ensuremath{\Partial@start\frac{\partial #1(#3)} + {\partial #2}\Partial@end}% + \else + \ensuremath{\Partial@start\frac{\partial #1(#2,#3)} + {\partial #2}\Partial@end}% + \fi + \fi + \fi + \fi +} +\newcommand*{\Partial@star}[3]{% + \settowidth{\Partial@const@width}{\ensuremath{#3}}% + \addtolength{\Partial@const@width}{-0.15\Partial@const@width}% + \Partial@nostar{#1}{#2}{#3}% + \if@subscripted + \ifdim\operator@width<\Partial@const@width + \kern -\operator@width + \else + \kern -\Partial@const@width + \fi + \fi +} +\def\PartialBigg{% + \def\Partial@start{\Biggl\PartialOpen}% + \def\Partial@end{\Biggr\PartialClose}% + \def\Partial@empty@end{\Biggr\PartialClose}% + \Partial% +} +\def\Partialbigg{% + \def\Partial@start{\biggl\PartialOpen}% + \def\Partial@end{\biggr\PartialClose}% + \def\Partial@empty@end{\biggr\PartialClose}% + \Partial% +} +\def\PartialSecond{\@ifstar\PartialSecond@star\PartialSecond@nostar} +\newcommand*{\PartialSecond@nostar}[3]{% + \def\tmp@arg{#3}% + \if@subscripted + % Handles situation of empty variables held constant + \ifx\tmp@arg\@empty + \ensuremath{\Partial@start\frac{\partial^2 #1} + {\partial #2^2}\Partial@empty@end}% + \else + \ensuremath{\Partial@start\frac{\partial^2 #1} + {\partial #2^2}\Partial@end_{#3}}% + \fi + \else + \ifx\tmp@arg\@empty + \ensuremath{\Partial@start\frac{\partial^2 #1} + {\partial #2^2}\Partial@empty@end}% + \else + % Check for whether #3 contains \allNsbut{i}/etc. and #2 is \Nt_i/etc. + \thermo@parse@two#2\relax + \iftwo@has@Nt + \renewcommand*{\allbut}[3][j]{\allcomponents{##3}}% + \ensuremath{\Partial@start\frac{\partial^2 #1(#3)} + {\partial #2^2}\Partial@end}% + \else + \iftwo@has@xory + \renewcommand*{\allbutlastand}[3][j]{\allbut{\ncomponents}{##3}}% + \ensuremath{\Partial@start\frac{\partial^2 #1(#3)} + {\partial #2^2}\Partial@end}% + \else + \ensuremath{\Partial@start\frac{\partial^2 #1(#2,#3)} + {\partial {#2}^2}\Partial@end}% + \fi + \fi + \fi + \fi +} +\newcommand*{\PartialSecond@star}[3]{% + \settowidth{\Partial@const@width}{\ensuremath{#3}}% + \addtolength{\Partial@const@width}{-0.15\Partial@const@width}% + \PartialSecond@nostar{#1}{#2}{#3}% + \if@subscripted + \ifdim\operator@width<\Partial@const@width + \kern -\operator@width + \else + \kern -\Partial@const@width + \fi + \fi +} +\def\PartialSecondBigg{% + \def\Partial@start{\expandafter\Biggl\PartialOpen}% + \def\Partial@end{\expandafter\Biggr\PartialClose}% + \PartialSecond% +} +\def\PartialSecondbigg{% + \def\Partial@start{\expandafter\biggl\PartialOpen}% + \def\Partial@end{\expandafter\biggr\PartialClose}% + \PartialSecond% +} +\def\PartialMixSecond{\@ifstar\PartialMixSecond@star\PartialMixSecond@nostar} +\newcommand*{\PartialMixSecond@nostar}[4]{% + \def\tmp@arg{#4}% + \if@subscripted + % Handles situation of empty variables held constant + \ifx\tmp@arg\@empty + \ensuremath{\Partial@start\frac{\partial^2 #1} + {\partial #2\partial#3}\Partial@empty@end}% + \else + \ensuremath{\Partial@start\frac{\partial^2 #1} + {\partial #2\partial#3}\Partial@end_{#4}}% + \fi + \else + \ifx\tmp@arg\@empty + \ensuremath{\Partial@start\frac{\partial^2 #1(#2,#3)} + {\partial #2\partial#3}\Partial@empty@end}% + \else + % This time, we check whether #2 OR #3 are \Nt_i/etc. + \thermo@parse@two#3\relax + \iftwo@has@Nt\three@has@Nttrue\fi + \iftwo@has@xory\three@has@xorytrue\fi + \two@has@Ntfalse + \two@has@xoryfalse + \thermo@parse@two#2\relax + \iftwo@has@Nt + \renewcommand*{\allbut}[3][j]{\allcomponents{##3}}% + \ensuremath{\Partial@start\frac{\partial^2 #1(#3,#4)} + {\partial #2\partial#3}\Partial@end}% + \else + \iftwo@has@xory + \renewcommand*{\allbutlastand}[3][j]{\allbut{\ncomponents}{##3}}% + \ensuremath{\Partial@start\frac{\partial^2 #1(#3,#4)} + {\partial #2\partial#3}\Partial@end}% + \else + \ifthree@has@Nt + \renewcommand*{\allbut}[3][j]{\allcomponents{##3}}% + \ensuremath{\Partial@start\frac{\partial^2 #1(#2,#4)} + {\partial #2\partial#3}\Partial@end}% + \else + \ifthree@has@xory + \PackageWarning{thermodynamics}{GOT HERE} + %\renewcommand*{\allbutlastand}[3][j]{\allbut{\ncomponents}{##3}}% + \renewcommand*{\allbutlastand}[3][j]{SCREW YOU}% + \ensuremath{\Partial@start\frac{\partial^2 #1(#2,#4)} + {\partial #2\partial#3}\Partial@end}% + \else + \ensuremath{\Partial@start\frac{\partial^2 #1(#2,#3,#4)} + {\partial #2\partial#3}\Partial@end}% + \fi + \fi + \fi + \fi + \fi + \fi +} +\newcommand*{\PartialMixSecond@star}[4]{% + \settowidth{\Partial@const@width}{\ensuremath{#4}}% + \addtolength{\Partial@const@width}{-0.25\Partial@const@width}% + \PartialMixSecond@nostar{#1}{#2}{#3}{#4}% + \if@subscripted + \ifdim\operator@width<\Partial@const@width + \kern -\operator@width + \else + \kern -\Partial@const@width + \fi + \fi +} +\def\PartialMixSecondBigg{% + \def\Partial@start{\expandafter\Biggl\PartialOpen}% + \def\Partial@end{\expandafter\Biggr\PartialClose}% + \PartialMixSecond% +} +\def\PartialMixSecondbigg{% + \def\Partial@start{\expandafter\biggl\PartialOpen}% + \def\Partial@end{\expandafter\biggr\PartialClose}% + \PartialMixSecond% +} +\AtBeginDocument{% + \@ifpackageloaded{amsmath}{}{% + \PackageWarningNoLine{thermodynamics} + {Package amsmath not loaded; load to make PartialBigg and friends + work correctly}% + \let\PartialBigg\Partial + \let\Partialbigg\Partial + \let\PartialSecondBigg\PartialSecond + \let\PartialSecondbigg\PartialSecond + \let\PartialMixSecondBigg\PartialMixSecond + \let\PartialMixSecondbigg\PartialMixSecond + }% +} +\newenvironment*{thermoparentheses}{ + \renewcommand*{\PartialOpen}{(}% + \renewcommand*{\PartialClose}{)}% + \renewcommand*{\PartialEmptyClose}{)}% +}{} +\newenvironment*{thermobrackets}{% + \renewcommand*{\PartialOpen}{[}% + \renewcommand*{\PartialClose}{]}% + \renewcommand*{\PartialEmptyClose}{]}% +}{} +\newenvironment*{thermobraces}{% + \renewcommand*{\PartialOpen}{\{}% + \renewcommand*{\PartialClose}{\}}% + \renewcommand*{\PartialEmptyClose}{\}}% +}{} +\newenvironment*{thermobar}{% + \renewcommand*{\PartialOpen}{.}% + \renewcommand*{\PartialClose}{\rvert}% + \renewcommand*{\PartialEmptyClose}{.}% +}{} +\newenvironment*{thermoplain}{% + \renewcommand*{\PartialOpen}{.}% + \renewcommand*{\PartialClose}{.}% + \renewcommand*{\PartialEmptyClose}{.}% + \@subscriptedfalse +}{} +\newenvironment*{thermoNOsubscripts}{\@subscriptedfalse}{} +\newenvironment*{thermosubscripts}{\@subscriptedtrue}{} +\newcommand*{\DeclareSubscrSymbol}[3]{% + \expandafter\def\csname #1\endcsname{% + \@ifnextchar^{\csname @#1\endcsname} + {\@ifnextchar_{\csname @@#1\endcsname}{{#2}_{#3}}} + } + \expandafter\def\csname @#1\endcsname ##1##2{% + {#2}^{##2}\@ifnextchar_{\csname @@@#1\endcsname}{_{#3}}% + } + \expandafter\def\csname @@#1\endcsname ##1##2{{#2}_{#3,##2}} + \expandafter\def\csname @@@#1\endcsname ##1##2{_{#3,##2}} +} +\newcommand*{\heatcapacitysymbol}{C} +\newcommand*{\compressibilitysymbol}{\kappa} +\newcommand*{\expansivitysymbol}{\alpha} +\DeclareSubscrSymbol{cV}{\@intensive\heatcapacitysymbol}{\volume@symbol} +\DeclareSubscrSymbol{cP}{\@intensive\heatcapacitysymbol}{\pressure@symbol} +\DeclareSubscrSymbol{cVt}{\@extensive\heatcapacitysymbol}{\volume@symbol} +\DeclareSubscrSymbol{cPt}{\@extensive\heatcapacitysymbol}{\pressure@symbol} +\DeclareSubscrSymbol{cVs}{\@specific\heatcapacitysymbol}{\volume@symbol} +\DeclareSubscrSymbol{cPs}{\@specific\heatcapacitysymbol}{\pressure@symbol} +\DeclareSubscrSymbol{kappaT}{\compressibilitysymbol}{\temperature@symbol} +\DeclareSubscrSymbol{kappaS}{\compressibilitysymbol}{\entropy@symbol} +\DeclareSubscrSymbol{alphaP}{\expansivitysymbol}{\pressure@symbol} +\DeclareSubscrSymbol{alphaS}{\expansivitysymbol}{\entropy@symbol} +\newcommand*{\sat}{{\text{sat}}} +\newcommand*{\Psat}{P^\sat} +\let\Pvap\Psat +\newcommand*{\phisat}{\phi^\sat} +\newcommand*{\fsat}{f^\sat} +\let\std\circ +\newcommand*{\Pstd}{P^\std} +\newcommand*{\fstd}{f^\std} +\newcommand*{\mixing}{{\text{mix}}} +\newcommand*{\Deltamix}[1]{\Delta{#1}_\mixing} +\newcommand*{\fusion}{{\text{fus}}} +\newcommand*{\reaction}{{\text{rxn}}} +\newcommand*{\sublimation}{{\text{sub}}} +\newcommand*{\vaporization}{{\text{vap}}} +\newcommand*{\formation}{f} +\newcommand*{\Deltafus}[1]{\Delta{#1}^\fusion} +\newcommand*{\Deltasub}[1]{\Delta{#1}^\sublimation} +\newcommand*{\Deltavap}[1]{\Delta{#1}^\vaporization} +\let\Delta@rxn@sym\relax +\DeclareSubscrSymbol{@DeltarxncP}{\Delta@rxn@sym}{\pressure@symbol,\reaction} +\DeclareSubscrSymbol{@Deltarxn}{\Delta@rxn@sym}{\reaction} +\newcommand*{\Deltarxn}[1]{% + \def\tmp@arg{#1}% + \def\tmp@@arg{\cP}% + \ifx\tmp@arg\tmp@@arg\relax + \def\@command{\def\Delta@rxn@sym{\Delta\@intensive\heatcapacitysymbol}% + \@DeltarxncP} + \else + \def\@command{\def\Delta@rxn@sym{\Delta{#1}}\@Deltarxn} + \fi + \@command +} +\let\Delta@f@sym\relax +\DeclareSubscrSymbol{@Deltaf}{\Delta@f@sym}{f} +\newcommand*{\Deltaf}[1]{\def\Delta@f@sym{\Delta{#1}}\@Deltaf} +\newcommand*{\fmix}{\hat{f}} +\newcommand*{\phimix}{\hat\phi} +\newcommand*{\fpure}{f} +\let\phipure\phi +\let\pm@symbol\relax +\newcommand*{\partialmolar}[1]{\gdef\pm@symbol{#1}\generic@pm} +\def\generic@pm{\@ifnextchar_\@generic@pm\@@generic@pm} +\def\@generic@pm#1#2{% + \gdef\pm@arg{#2}% + % if nextchar after argument is ^ + \@ifnextchar^\@@@generic@pm\@@@@generic@pm +} +\def\@@@generic@pm#1#2{\thermo@overline{\pm@symbol^{#2}_{\pm@arg}}} +\def\@@@@generic@pm{\thermo@overline{\pm@symbol_{\pm@arg}}} +\def\@@generic@pm{\@ifnextchar^\@@@@@generic@pm\@pm@bracket@check} +\def\@@@@@generic@pm#1#2#3#4{\thermo@overline{\pm@symbol^{#2}_{#4}}} +\def\@pm@bracket@check{\@ifnextchar[\@pm@bracket@yes\@pm@bracket@no} +\def\@pm@bracket@yes[#1]#2{\thermo@overline{\pm@symbol^{#1}_{#2}}} +\def\@pm@bracket@no#1{\thermo@overline{\pm@symbol_{#1}}} +\newcommand*{\Nt}{\mole@symbol} +\newcommand*{\Et}{\@extensive\totalenergy@symbol} +\newcommand*{\Ut}{\@extensive\internalenergy@symbol} +\newcommand*{\Ft}{\@extensive\Helmholtz@symbol} +\newcommand*{\Gt}{\@extensive\Gibbs@symbol} +\newcommand*{\Ht}{\@extensive\enthalpy@symbol} +\newcommand*{\Lt}{\@extensive\Landau@symbol} +\newcommand*{\At}{\@extensive\area@symbol} +\newcommand*{\St}{\@extensive\entropy@symbol} +\newcommand*{\Vt}{\@extensive\volume@symbol} +\newcommand*{\Qt}{\@extensive\heat@symbol} +\newcommand*{\Wt}{\@extensive\work@symbol} +\newcommand*{\Mt}{\@extensive M} +\newcommand*{\Bt}{\@extensive B} +\newcommand*{\Em}{\@intensive\totalenergy@symbol} +\newcommand*{\Um}{\@intensive\internalenergy@symbol} +\newcommand*{\Fm}{\@intensive\Helmholtz@symbol} +\newcommand*{\Gm}{\@intensive\Gibbs@symbol} +\newcommand*{\Hm}{\@intensive\enthalpy@symbol} +\newcommand*{\Lm}{\@intensive\Landau@symbol} +\newcommand*{\Am}{\@intensive\area@symbol} +\newcommand*{\Sm}{\@intensive\entropy@symbol} +\newcommand*{\Vm}{\@intensive\volume@symbol} +\newcommand*{\Qm}{\@intensive\heat@symbol} +\newcommand*{\Wm}{\@intensive\work@symbol} +\newcommand*{\Mm}{\@intensive M} +\newcommand*{\Bm}{\@intensive B} +\newcommand*{\Us}{\@specific\internalenergy@symbol} +\newcommand*{\Es}{\@specific\totalenergy@symbol} +\newcommand*{\Fs}{\@specific\Helmholtz@symbol} +\newcommand*{\Gs}{\@specific\Gibbs@symbol} +\newcommand*{\Hs}{\@specific\enthalpy@symbol} +\newcommand*{\Ls}{\@specific\Landau@symbol} +\newcommand*{\As}{\@specific\area@symbol} +\newcommand*{\Ss}{\@specific\entropy@symbol} +\newcommand*{\Vs}{\@specific\volume@symbol} +\newcommand*{\Qs}{\@specific\heat@symbol} +\newcommand*{\Ws}{\@specific\work@symbol} +\newcommand*{\Ms}{\@specific M} +\newcommand*{\Bs}{\@specific B} +\newcommand*{\Epm}{\partialmolar{\totalenergy@symbol}} +\newcommand*{\Upm}{\partialmolar{\internalenergy@symbol}} +\newcommand*{\Hpm}{\partialmolar{\enthalpy@symbol}} +\newcommand*{\Fpm}{\partialmolar{\Helmholtz@symbol}} +\newcommand*{\Gpm}{\partialmolar{\Gibbs@symbol}} +\newcommand*{\Apm}{\partialmolar{\area@symbol}} +\newcommand*{\Spm}{\partialmolar{\entropy@symbol}} +\newcommand*{\Vpm}{\partialmolar{\volume@symbol}} +\newcommand*{\Lpm}{\partialmolar{\Omega}} +\newcommand*{\Mpm}{\partialmolar{M}} +\newcommand*{\Bpm}{\partialmolar{B}} +\newcommand*{\cPpm}{% + \def\@@@generic@pm##1##2{% + \thermo@overline{\pm@symbol^{##2}_{\pressure@symbol,\pm@arg}}}% + \def\@@@@generic@pm{\thermo@overline{\pm@symbol_{\pressure@symbol,\pm@arg}}}% + \def\@@@@@generic@pm##1##2##3##4{% + \thermo@overline{\pm@symbol^{##2}_{\pressure@symbol,##4}}}% + \def\@pm@bracket@yes[##1]##2{% + \thermo@overline{\pm@symbol^{##1}_{\pressure@symbol,##2}}}% + \def\@pm@bracket@no##1{\thermo@overline{\pm@symbol_{\pressure@symbol,##1}}}% + \partialmolar{\heatcapacitysymbol}% +} +\newcommand*{\cVpm}{% + \def\@@@generic@pm##1##2{% + \thermo@overline{\pm@symbol^{##2}_{\volume@symbol,\pm@arg}}}% + \def\@@@@generic@pm{\thermo@overline{\pm@symbol_{\volume@symbol,\pm@arg}}}% + \def\@@@@@generic@pm##1##2##3##4{% + \thermo@overline{\pm@symbol^{##2}_{\volume@symbol,##4}}}% + \def\@pm@bracket@yes[##1]##2{% + \thermo@overline{\pm@symbol^{##1}_{\volume@symbol,##2}}}% + \def\@pm@bracket@no##1{\thermo@overline{\pm@symbol_{\volume@symbol,##1}}}% + \partialmolar{\heatcapacitysymbol}% +} +\newcommand*{\residual}{R} +\newcommand*{\excess}{E} +\newcommand*{\UR}{\Um^\residual} +\newcommand*{\HR}{\Hm^\residual} +\newcommand*{\FR}{\Fm^\residual} +\newcommand*{\GR}{\Gm^\residual} +\newcommand*{\VR}{\Vm^\residual} +\newcommand*{\SR}{\Sm^\residual} +\newcommand*{\URt}{\Ut^\residual} +\newcommand*{\HRt}{\Ht^\residual} +\newcommand*{\FRt}{\Ft^\residual} +\newcommand*{\GRt}{\Gt^\residual} +\newcommand*{\VRt}{\Vt^\residual} +\newcommand*{\SRt}{\St^\residual} +\newcommand*{\URs}{\Us^\residual} +\newcommand*{\HRs}{\Hs^\residual} +\newcommand*{\FRs}{\Fs^\residual} +\newcommand*{\GRs}{\Gs^\residual} +\newcommand*{\VRs}{\Vs^\residual} +\newcommand*{\SRs}{\Ss^\residual} +\newcommand*{\URpm}{\partialmolar{\internalenergy@symbol^\residual}} +\newcommand*{\HRpm}{\partialmolar{\enthalpy@symbol^\residual}} +\newcommand*{\FRpm}{\partialmolar{\Helmholtz@symbol^\residual}} +\newcommand*{\GRpm}{\partialmolar{\Gibbs@symbol^\residual}} +\newcommand*{\VRpm}{\partialmolar{\volume@symbol^\residual}} +\newcommand*{\SRpm}{\partialmolar{\entropy@symbol^\residual}} +\newcommand*{\UE}{\Um^\excess} +\newcommand*{\FE}{\Fm^\excess} +\newcommand*{\HE}{\Hm^\excess} +\newcommand*{\GE}{\Gm^\excess} +\newcommand*{\SE}{\Sm^\excess} +\newcommand*{\VE}{\Vm^\excess} +\newcommand*{\UEt}{\Ut^\excess} +\newcommand*{\FEt}{\Ft^\excess} +\newcommand*{\HEt}{\Ht^\excess} +\newcommand*{\GEt}{\Gt^\excess} +\newcommand*{\SEt}{\St^\excess} +\newcommand*{\VEt}{\Vt^\excess} +\newcommand*{\UEs}{\Us^\excess} +\newcommand*{\FEs}{\Fs^\excess} +\newcommand*{\HEs}{\Hs^\excess} +\newcommand*{\GEs}{\Gs^\excess} +\newcommand*{\SEs}{\Ss^\excess} +\newcommand*{\VEs}{\Vs^\excess} +\newcommand*{\UEpm}{\partialmolar{\internalenergy@symbol^\excess}} +\newcommand*{\HEpm}{\partialmolar{\enthalpy@symbol^\excess}} +\newcommand*{\FEpm}{\partialmolar{\Helmholtz@symbol^\excess}} +\newcommand*{\GEpm}{\partialmolar{\Gibbs@symbol^\excess}} +\newcommand*{\VEpm}{\partialmolar{\volume@symbol^\excess}} +\newcommand*{\SEpm}{\partialmolar{\entropy@symbol^\excess}} +\newcommand*{\sumall}{\@ifnextchar_\@sumall\@@sumall} +\def\@sumall#1#2{\sum_{#2=1}^{\ncomponents}} +\def\@@sumall#1{\sum_{#1=1}^{\ncomponents}} +\newcommand*{\sumallbutlast}{\@ifnextchar_\@sumallbutlast\@@sumallbutlast} +\def\@sumallbutlast#1#2{\sum_{#2=1}^{\ncomponents-1}} +\def\@@sumallbutlast#1{\sum_{#1=1}^{\ncomponents-1}} +\newcommand*{\prodall}{\@ifnextchar_\@prodall\@@prodall} +\def\@prodall#1#2{\prod_{#2=1}^{\ncomponents}} +\def\@@prodall#1{\prod_{#1=1}^{\ncomponents}} +\newcommand*{\IG}{{\text{IG}}} +\newcommand*{\IGM}{{\text{IGM}}} +\newcommand*{\IS}{{\text{IS}}} +\newcommand*{\Henryrat}{h} +\newcommand*{\Henrymol}{{\mathcal{H}}} +\AtBeginDocument{% + \providecommand*{\square}{% + \text{\leavevmode + \hbox to.77778em{% + \hfil\vrule + \vbox to.6em{\hrule width.6em\vfil\hrule}% + \vrule\hfil}% + }% + }% +} +\newcommand*{\gammarat}{\gamma^\ast} +\newcommand*{\gammamol}{\gamma^\square} +\newcommand*{\Jacobian}[4]{\frac{\partial{(#1,#2)}}{\partial{(#3,#4)}}}% +\endinput +%% +%% End of file `thermodynamics.sty'. diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check index 54cd91e6174..25d8b1a9eb9 100755 --- a/Master/tlpkg/bin/tlpkg-ctan-check +++ b/Master/tlpkg/bin/tlpkg-ctan-check @@ -779,7 +779,7 @@ my @TLP_working = qw( textualicomma texvc textcase textfit textglos textgreek textmerg textopo textpath textpos tfrupee thaienum thaispec thalie - theanodidot theanomodern theanooldstyle theatre theoremref + theanodidot theanomodern theanooldstyle theatre theoremref thermodynamics thesis-ekf thesis-gwu thesis-qom thesis-titlepage-fhac thinsp thmbox thmtools threadcol threeddice threeparttable threeparttablex diff --git a/Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc b/Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc index dc2f69bd3c4..89f032c872c 100644 --- a/Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc +++ b/Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc @@ -224,6 +224,7 @@ depend tensor depend tex-ewd depend textgreek depend textopo +depend thermodynamics depend thmbox depend tiscreen depend turnstile diff --git a/Master/tlpkg/tlpsrc/thermodynamics.tlpsrc b/Master/tlpkg/tlpsrc/thermodynamics.tlpsrc new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/Master/tlpkg/tlpsrc/thermodynamics.tlpsrc |