\ifmmode проверить заголовок раздела

\ifmmode проверить заголовок раздела

Чтобы гарантировать правильное использование новых команд, которые должны использоваться только в mathmode, я ввел mathcommand, который проверяет mathmode по \ifmmode.

Теперь я хочу использовать такойmathcommand в заголовке разделаи появляется предупреждение математической среды, хотя команда используется в mathmode:

\documentclass{scrbook}

% provide mathcommand environment
\newcommand{\assuremath}{%
  \relax\ifmmode\else\message{LaTeX Warning: Mathmode command used outside of math mode on input line \the\inputlineno}\fi
}
\newcommand{\newmathcommand}[2]{\newcommand{#1}{#2\assuremath}}
\newcommand{\renewmathcommand}[2]{\renewcommand{#1}{#2\assuremath}}

% define some mathcommand
\newmathcommand{\someMathCommand}{e^x}

\begin{document}
  % use mathcommand in a caption
  \section{I love $\someMathCommand$}
\end{document}

Я не знаком с механизмами математического режима в заголовках разделов. Думаю, именно поэтому и возникает проблема...

решение1

Вот что происходит.

Заголовок раздела — это перемещаемый аргумент, то есть он сохраняется в памяти и записывается в .auxфайл при отправке следующей страницы.

При выполнении операции записи TeX расширяет макросыбезвыполнение команд; более того, этонетв математическом режиме в это время (он находится внетmode, на самом деле). Это означает, что условие ложно и \message{...}записывается в .auxфайл.

Вы решаете проблему, говоря:

\DeclareRobustCommand{\assuremath}{%
  \relax\ifmmode\else\message{LaTeX Warning: Mathmode command used outside of math mode on input line \the\inputlineno}\fi
}

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