[Tex/LaTex] How to write a macro which enters math mode when called in text mode but when called in mathmode doesn’t break

macrosmath-mode

I'm using the package braket for my physics notes, and this speeds things up a great deal but I'm constantly writing \ket{\psi} or \bra{\psi}, and because this specific pair of bra and ket appears so often, this gets repetitive and I would like a macro to speed this up. However since the braket package works only in math mode, my attempt \newcommand{\ketp}{$\ket{\psi}}$ work when I'm writing in text mode, but when I'm writing in mathmode it breaks (unsurprisingly).

Is there any way I can get this command to work in both mathmode and textmode without having to define two different macros, one for each?

Thanks in advance for any help.

P.S. I'm certain this is a very simple question but I could find little to no explanation of this feature.

Best Answer

You can use

\newcommand{\ketp}{\ensuremath{\ket{\psi}}}

However it isn't clear that it's always a good idea to do this. TeX markup is based on a design that has a clear distinction between text and math commands, the assumption is that the author always knows which mode is in use, and typically similar commands for use in text and math have different names, compare \^ and \hat for example.

That said, \ensuremath was added to LaTeX to do exactly what you ask, so if you want to use it, it's there...

Related Question