如何根據巨集是在文字模式還是數學模式下使用來有條件地定義巨集?

如何根據巨集是在文字模式還是數學模式下使用來有條件地定義巨集?

我希望能夠製作一個宏,\foo其定義如下

\newcommand{\foo}{
  \ifintextmode{abc}
  \ifinmathmode{x\cdot y\otimes z}
}

以便

\foo $\foo$

產生

在此輸入影像描述

這個 TeX.SE 問題似乎有些相關,但我不太明白答案,它並不能直接解決我的問題。很抱歉,在我自己取得任何進步方面,我沒有什麼可以提供的了。

答案1

\DeclareRobustCommand{\foo}{%
  \ifmmode
   x\cdot y\otimes z%
  \else
  abc%
   \fi
}

我應該說,雖然這樣做(或使用類似的\ensuremath命令)通常是一個壞主意,因為 TeX 在文本和數學之間有內置的區別,而且作者實際上需要始終知道文檔是處於文本模式還是數學模式,並在每種情況下使用適當的命令。

考慮重音命令;\hat可以按上面的方式定義為在文字或數學模式下工作,但可以用純 TeX(和 LaTeX)定義\hat數學模式和\^文字模式。這兩個命令的實現和語義非常不同,表面上對文字和數學使用相同的語法不會有幫助。

相關內容