这个问题分为两部分。首先,有没有办法只为数学模式定义宏?
其次,我具体该如何让以下定义正确工作?
\def\fi{f^{-1}}
另外一点是,我试图在本地范围内而不是全局范围内创建这个定义,但我不确定这是否相关。
答案1
\def\fi{f^{-1}}
甚至不要思考重新定义的\fi
\fi
是终止每个条件构造的 TeX 基元(如果反向)。如果您重新定义它,那么 LaTeX 中的每个构造或多或少都会被破坏。
\def\finv{f^{-1}}
将定义\finv
为产生 f -1^
,这是我假设您想要的而不是打印输出中的文字?
答案2
您可以使用
\ifmmode
,例如\def\fim{\ifmmode f^{-1}\fi}
除非您是巫师,否则不要重新定义
\fi
。它用于所有\if..
构造。\fim
而是定义。
答案3
首先\fi
是 TeX 原语,它声明语句的结束if
。要回答您的问题,您可以使用以下amsmath
包:
\def\finv{\ensuremath{f^{-1}}}
这可确保您每次都处于数学模式。然而,使用fixltx2e
和xspace
包的变体,您可以使用以下命令创建相同的命令\TextOrMath{<text mode>}{<math mode>}
:
\newcommand{\finv}{\TextOrMath{$f^{-1}$\xspace}{f^{-1}}}