\ifmmode-Prüfung in Abschnittsüberschrift

\ifmmode-Prüfung in Abschnittsüberschrift

Um die korrekte Verwendung von neuen Befehlen sicherzustellen, die nur im Mathematikmodus verwendet werden sollen, habe ich einen eingeführt mathcommand, der den Mathematikmodus anhand überprüft \ifmmode.

Nun möchte ich so einMathematikbefehl in einer Abschnittsüberschrift, und die Warnung der mathematischen Umgebung wird angezeigt, obwohl der Befehl im Mathematikmodus verwendet wird:

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

Ich bin mit den Mechanismen des Mathematikmodus in Abschnittsüberschriften nicht vertraut. Ich vermute, das ist der Grund, warum das Problem auftritt ...

Antwort1

Folgendes passiert:

Ein Abschnittstitel ist ein bewegliches Argument, was bedeutet, dass er im Speicher abgelegt und .auxbeim nächsten Seitenversand in die Datei ausgeschrieben wird.

Wenn der Schreibvorgang ausgeführt wird, erweitert TeX MakrosohneAusführen von Befehlen; außerdem ist esnichtim Mathe-Modus zu der Zeit (es ist inNEINModus, eigentlich). Das bedeutet, dass die Bedingung falsch ist und \message{...}in die Datei geschrieben wird .aux.

Sie lösen das Problem, indem Sie sagen:

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

verwandte Informationen