5

I'm using pdftex and I want to define a command for the typesetting of quantum mechanical operators that produces upright letters with a \hat accent. The problem is that the obvious solution

\newcommand*{\op}[1]{{\hat{\mathrm{#1}}}}

does only work for roman letters but I also use at least one operator that should be represented by a greek letter for which the \mathrm command produces rubbish output. So it would be nice to define a command that distinguishes between greek and roman letters via an if statement. Since I have very little experience with TeX I don't really know how to tackle this problem.

4

As long as you strictly use one token in the argument of \op, here is a way:

\DeclareRobustCommand{\op}[1]{\hat{\ifcat#1\relax#1\else\mathrm{#1}\fi}}

The command is robust because it would break if used in captions. Use it only as

\op{A} \op{x} \op{\Gamma} \op{\beta}

You might consider also to add \mathop:

\DeclareRobustCommand{\op}[1]{%
  \mathop{\hat{\ifcat#1\relax#1\else\mathrm{#1}\fi}}\nolimits}

that will provide correct spacing of the symbol used as an operator.

  • Wow, that was quick. Thank you very much. This really solves my problem. I go with the first alternative since the \mathop command produces wrong output, when used with indices such as \op{H}_{i}. – Philipp Jul 24 '11 at 17:13
  • Sorry, I forgot a key command. – egreg Jul 24 '11 at 17:13
  • @egreg: Sorry if I dig out this old post, but: Would it be the same if I wrote \ifcat#1a\mathrm{#1}\else#1\fi instead? – campa Aug 14 '15 at 11:42
  • @campa Yes, that's the same – egreg Aug 14 '15 at 19:37

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.