
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 .aux
arquivo 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 .aux
arquivo.
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
}