Использование \xspace внутри \bm (пакет bm) приводит к ошибке «incomplete \iffalse»

Использование \xspace внутри \bm (пакет bm) приводит к ошибке «incomplete \iffalse»

Я хотел бы использовать команду пробела \xspace внутри команды для жирных математических выражений: \bm пакета bm. Но я получаю ошибку "Incomplete \iffalse", как в примере ниже.

\documentclass{article}
\usepackage{xspace}
\usepackage{bm}
\begin{document}
$\bm{x^2 \xspace}$
\end{document}

Причина, по которой мне нужен \xspace внутри математического режима, заключается в том, что я использую его для определения команд, которые отлично работают как при вызове внутри, так и вне математического режима. Причина в том, что при написании текстовых предложений мне лень переключаться в математический режим и обратно каждый раз, когда я говорю о концепции, вот пример (разочарованный ответом г-на Карлайла):

\usepackage{xspace}
\newcommand{\adva}{\ensuremath{\mathrm{Adv}^A}\xspace}
\begin{document}
Denote \adva the advantage of adversary A in the game.

We have: $\adva<\epsilon$.
\end{document}

решение1

Я бы избегал этого \xspaceв целом (несмотря на то, что я это написал) и, безусловно, гарантировал бы, что это никогда не появится в математическом режиме. Обычно это плохой стиль — использовать \ensuremathв командах уровня документа, TeX разработан так, чтобы четко различать математику и текст, тот факт, что \sinделает sinв математике и делает ошибку в тексте — это особенность, а не проблема.

Если вам действительно нужно, вы можете сделать

\newcommand{\xtwo}{%
  \ensuremath{x^2}%
  \ifmmode\else\expandafter\xspace\fi
}

но я бы не стал.

Связанный контент