47

I'd like a macro that is the opposite of \ensuremath: something like \ensurenotmath, which makes sure that its argument is not typeset in math mode. Is there such a macro, or a way to implement it?

For my purposes, it would be sufficient to just detect math mode, so I could do something like:

\if\inmathmode
    % give sensible error message
\else
    % do the usual thing
\fi

Any ideas?

(Alternatively: I tried \show\ensuremath to see how it works, but it's protected. How can I use \show on such a macro?)

4
  • 4
    morbusg answered your real question. For the second question, protected macros come are defined by expanding to \protect\foo where there is actually a space in the name \foo . You can use \expandafter\show\csname foo \endcsname--note the space after foo--to see the definition.
    – TH.
    Apr 7, 2011 at 6:38
  • 6
    Also, you can use \mbox{...} and the ... will be typeset in restricted horizontal mode, no matter what mode you're in outside the \mbox.
    – TH.
    Apr 7, 2011 at 6:39
  • @TH: thanks for the tip about \expandafter and \csname!
    – Dan Drake
    Apr 7, 2011 at 7:01
  • 2
    You could also use the texdef script: texdef -t latex ensuremath (or latexdef ensuremath if the latedef symlink to texdef was created). It detects the protected status automatically and also show the macro with the space. You can also use it explicitly: texdef -t latex 'ensuremath ' Apr 7, 2011 at 7:39

2 Answers 2

36

\ifmmode <do_something>\else <do_something_else>\fi

4
  • 3
    Heh, you beat me by 2 seconds.
    – TH.
    Apr 7, 2011 at 6:36
  • 3
    @TH.: Haha, I know the feeling
    – morbusg
    Apr 7, 2011 at 6:41
  • 1
    Ack! I found \ifmmode right after posting this question. Thanks for the super-quick answer.
    – Dan Drake
    Apr 7, 2011 at 6:57
  • 11
    Note, however, that if you reliably want to escape from math mode to text then you need to use an \mbox. This is nicely wrapped up by the amstext package as the \text macro.
    – Joseph Wright
    Apr 7, 2011 at 7:42
20

Simply using \text{} should ensure that you are not in math mode?

Joseph makes a very good point about text{} not being unrestricted horizontal mode, so the above will work only for short text snippets that don't need to cross line boundaries. I think a better solution would be:

\parbox{\linewidth}{}

1
  • 2
    Note that this will be a box: you can't use this to get into unrestricted horizontal mode.
    – Joseph Wright
    Aug 3, 2011 at 18:37

You must log in to answer this question.

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