\ifmmode 检查章节标题

\ifmmode 检查章节标题

为了确保正确使用只能在数学模式下使用的新命令,我引入了mathcommand,它通过检查数学模式\ifmmode

现在我想使用这样一个部分标题中的数学命令,尽管该命令是在数学模式下使用的,但会出现数学环境警告:

\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 会扩展宏没有执行命令;此外不是当时处于数学模式(它处于模式,实际上)。 这意味着条件为假,并\message{...}写入.aux文件。

你可以通过以下方式解决问题:

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

相关内容