我已定义一个宏,希望它只在数学模式下使用。为了实现这一点,我希望该宏在数学模式之外使用时会抛出一条错误消息。使宏仅具有数学模式的最简单方法是什么?
答案1
您可以使用\ifmmode
它来检查您是否处于数学模式,如果不是,则触发错误。尝试在数学模式之外使用它会产生以下结果:
尝试在数学模式之外使用 \MyMathModeMacro。
请参阅我的序言文档以获取解释。
输入 H 即可获得紧急帮助。
l.16 \MyMathModeMacro %<---这会产生错误?
笔记:
正如 David Carlisle 指出的那样,需要使用
\DeclareRobustCommand
而不是\newcommand
来避免过早扩张。参见\ifmmode 似乎在数组环境中无法正常工作。如果您想允许在数学模式中或之外使用宏,您可以使用
\ensuremath
在数学模式下排版内容。但您应该参考何时不应使用 \ensuremath 作为数学宏?在执行此操作之前。
代码:
\documentclass{article}
\makeatletter
\DeclareRobustCommand{\MyMathModeMacro}{%
\ifmmode
E = m c^2
\else
\GenericError{\space\space\space\space}
{Attempt to use \@backslashchar MyMathModeMacro outside of math mode}
{See my preamble documentation for explanation.}
{Need to use either use inline or display math.}%
\fi
}
\makeatother
\begin{document}
$\MyMathModeMacro$
\MyMathModeMacro% <--- This will produce an error
\end{document}