\ifmmode verificar na legenda da seção

\ifmmode verificar na legenda da seção

Para garantir o uso correto de novos comandos que só devem ser usados ​​no modo matemático, introduzi um mathcommand, que verifica o modo matemático por \ifmmode.

Agora eu quero usar talcomando matemático em uma legenda de seção, e o aviso do ambiente matemático aparece embora o comando seja usado no 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}

Não estou familiarizado com os mecanismos do modo matemático nas legendas das seções. Acho que é por isso que o problema ocorre...

Responder1

Aqui está o que acontece.

O título de uma seção é um argumento móvel, o que significa que é armazenado na memória e escrito no .auxarquivo quando ocorre o envio da próxima página.

Quando a operação de gravação é executada, o TeX expande as macrossemexecutar comandos; além disso énãono modo matemático no momento (está emnãomodo, na verdade). Isso significa que a condicional é falsa e \message{...}está gravada no .auxarquivo.

Você resolve o problema dizendo

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

informação relacionada