\ifmmode comprobar en el título de la sección

\ifmmode comprobar en el título de la sección

Para asegurar el uso correcto de los nuevos comandos que solo se usarán en modo matemático, he introducido un mathcommandcomando que verifica el modo matemático mediante \ifmmode.

Ahora quiero usar talcomando matemático en el título de una sección, y aparece la advertencia del entorno matemático aunque el comando se use en modo matemático:

\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}

No estoy familiarizado con los mecanismos del modo matemático en los títulos de las secciones. Supongo que esa es la razón por la cual ocurre el problema...

Respuesta1

Esto es lo que sucede.

El título de una sección es un argumento en movimiento, lo que significa que se almacena en la memoria y se escribe en el .auxarchivo cuando se envía la siguiente página.

Cuando se realiza la operación de escritura, TeX expande las macrossinejecutar comandos; además lo esnoen modo matemático en ese momento (está enNomodo, en realidad). Esto significa que el condicional es falso y \message{...}se escribe en el .auxarchivo.

Resuelves el problema diciendo

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

información relacionada