为了确保正确使用只能在数学模式下使用的新命令,我引入了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
}