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.

1 Answer 1

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.

4
  • 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
    Commented Jul 24, 2011 at 17:13
  • Sorry, I forgot a key command.
    – egreg
    Commented Jul 24, 2011 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
    Commented Aug 14, 2015 at 11:42
  • @campa Yes, that's the same
    – egreg
    Commented Aug 14, 2015 at 19:37

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .