[Tex/LaTex] Does boldface sans-serif not work

boldmath-modesans-serif

\documentclass{article}

\newcommand{\nptime}{\ensuremath{\sf NP}}
\newcommand{\bnptime}{\ensuremath{\sf\bf NP}}

\begin{document}
  \nptime\\
  \bnptime
\end{document}

I'm trying to make a macro to typeset "NP" in boldface sans-serif font, but as demonstrated by my MWE, it's not working. BF seems to force a serif font.

Alternatively, I'd be happy to find an opposite to \ensuremath, but I can't seem to find one. I tried \text{} to no avail.

The following similar MWE does the same thing.

\documentclass{article}

\newcommand{\nptime}{{\sf NP}}
\newcommand{\bnptime}{{\sf\bf NP}}

\begin{document}
  \nptime\\
  \bnptime
\end{document}

Best Answer

There's no need of \ensuremath: just use

\newcommand{\nptime}{\textsf{NP}}
\newcommand{\bnptime}{\textsf{\textbf{NP}}}

so that \nptime and \bnptime work both in text and math mode, even scaling when used in subscript or superscript if the amsmath package is used.


You discovered why \sf, \bf and all two letter font change commands are deprecated (and they have been since more than 10 years): the combination \sf\bf is simply equivalent to \bf, just like \sf\it would produce normal italic, not sans serif, and \it\sf would produce upright sans serif.