First of all, the problem presents for textual subscripts, such as those used in physics to distinguish between vectors with the same name (say a force) by a subscripted label that should go in upright type. Textual subscripts are used in many other fields.
In what follows, amsmath
is assumed.
$W_{\rm total}$
is totally wrong as it relies on a deprecated command that classes don't need to define (and indeed some don't).
$W_{\mathrm{total}}$
is the correct form of the above. Limitations: spaces are gobbled and hyphens become minus signs.
$W_{\textnormal{total}}$
uses the main roman font of the document, no matter the context; the argument is typeset as text at the correct size.
$W_{\mathup{total}}$
(with Ulrike Fischer's definition) has one advantage over \mathrm
, since it uses \familydefault
, but the same limitations.
$W_{\operatorname{total}}$
is like using a sledgehammer for killing a fly. It's the same as \mathrm
, but hyphens don't become minus signs.
$W_{\text{total}}$
might seem ideal, but it changes font according to the context, so the subscript would appear in italics in a theorem statement.
Therefore, form 3 seems the most natural. Notice that braces are not really necessary, except in case 5.
To be honest, for single words \mathrm
(or \mathup
) is more efficient, as \textnormal
uses \mathchoice
and typesets four times the subscript in different sizes. However, the overhead is almost negligible with modern machines and uniformity is to be preferred to efficiency, when it doesn't slow the workflow in a significant way.
If, for some reasons, one wants that textual subscripts are typeset in upright type, but keeping the current font family, for instance because some parts of the document use sans serif type also for math (which I don't agree with), a modified version of \textnormal
can be used:
\makeatletter
\DeclareRobustCommand{\textnormalf}[1]{% f for "keep the family
\text{\usefont{\f@encoding}{\f@family}{m}{n}#1}%
}
\makeatother
Here \f@encoding
and \f@family
are the current output font encoding and font family, as stored by LaTeX at each (text) font change; with font series m
and font shape n
we're choosing upright medium type.
Of course, a more meaningful name for \textnormalf
should be chosen according to its usage and semantics.
Imho there is no chance for a generic solution in legacy tex. There are always some small differences between the math font packages.
Regarding a pxfonts specific solution: Imho it is not impossible but it would be time consuming to set it up. In legacy tex the greek symbols are spread around: Some uppercase upright greek chars in OT1, some italic upper + lowercase in OML, the rest must probably be pulled from LGR, in the case of the pxfonts from the special font provided by the package. If you really cared only about \mathrm
you could probably do something like this:
\documentclass{article}
\usepackage{amsmath}
\usepackage{pxfonts}
\let\deltait\delta
\makeatletter
\renewcommand\delta
{%
\ifnum\fam=0 \deltaup\else \deltait\fi
}
\begin{document}
\begin{equation}
\delta \mathrm{\delta}
\end{equation}
\end{document}
But it wouldn't expand to \mathbf
and so I don't consider it a real solution.
But with xelatex/lualatex and unicode-math your example works fine (I changed the \Omega
to \ohm
in the \SI
-argument):
\documentclass{article}
\usepackage[math-style=ISO]{unicode-math}
\setmainfont{TeX Gyre Pagella}
\setmathfont{TeX Gyre Pagella Math}
\usepackage{siunitx}
\begin{document}
\begin{equation}
\Phi_{\symrm{\delta}} = \SI{42}{\micro\ohm} \cdot \delta_{\symrm{\Phi}}
\end{equation}
\begin{equation}
P_{\symrm{d}} = \SI{42}{\nano\ampere} \cdot d_{\symrm{P}}
\end{equation}
\end{document}
Best Answer
or if you do not want to load the kpfonts: