我正在使用最新的 SIAM 模板准备论文siamart_0516.zip下载自http://www.siam.org/journals/auth-info.php。
\tag{}
我在包含命令的数学方程中遇到错误特别的数学模式中的字符(例如,\mathbf{}
和\bar{}
等)。为了清楚起见,以下代码:
\documentclass[review]{siamart0516}
\usepackage{amsmath}
\begin{document}
\begin{equation}
\bar{x} = x + y
\tag{$\bar{x}$}
\label{eq:x}
\end{equation}
\end{document}
产生错误:
Package amsmath Error: \bar allowed only in math mode. \end{equation}
仅使用\tag{$x$}
而不\bar{}
工作正常:
\documentclass[review]{siamart0516}
\usepackage{amsmath}
\begin{document}
\begin{equation}
\bar{x} = x + y
\tag{$x$}
\label{eq:x}
\end{equation}
\end{document}
最后,初始不工作代码中使用标准文章documentclass
,即用 代替,\documentclass[review]{siamart0516}
效果\documentclass{article}
很好。
有什么猜测是什么导致了这个问题以及如何克服它?
答案1
由于非常奇怪的原因,当与和选项ntheorem
一起使用时,会重新定义(的内部命令)来执行其他操作thmmarks
amsmath
\maketag@@@
amsmath
\settowidth{\tagwidth}{$##1$}%
这是完全错误的,因为##1
替换为\tag
应该在文本模式。
现在,当您执行 时会发生什么\tag{$x$}
?\settowidth
宏将第二个参数放在 中\hbox
,因此结果是 ,\hbox{$$x$$}
这是合法的,因为$$
在受限水平模式下只排版一个空的数学公式,而测量的是文本模式“x”。但是$\bar{x}$
(或任何其他固有数学),代码\hbox{$$\bar{x}$$}
尝试\bar{x}
在文本模式下排版,并显示错误。此外,像 这样的内容\tag{a*}
最终会被错误测量,因为a*
文本模式下的宽度与 的宽度完全不同$a*$
。
解决方法:修补相关命令,删除令人讨厌的$
字符。
\documentclass{article}
\usepackage[leqno]{amsmath}
\usepackage{etoolbox}
\usepackage[amsmath,thmmarks,hyperref]{ntheorem}
\patchcmd{\SetTagPlusEndMark}{$}{}{}{}
\patchcmd{\SetTagPlusEndMark}{$}{}{}{}
\begin{document}
\begin{equation}
\bar{x} = x + y
\tag{$\bar{x}$}
\label{eq:x}
\end{equation}
\end{document}
同样适用于siamart0516.cls
:
\documentclass[review]{siamart0516}
\usepackage{amsmath}
\usepackage{etoolbox}
\patchcmd{\SetTagPlusEndMark}{$}{}{}{}
\patchcmd{\SetTagPlusEndMark}{$}{}{}{}
\begin{document}
\begin{equation}
\bar{x} = x + y
\tag{$\bar{x}$}
\label{eq:x}
\end{equation}
\end{document}
答案2
ntheorem
看起来像是该包的一个“功能”
您可以使用以下方式重现错误
\documentclass{article}
\usepackage[leqno]{amsmath}
\RequirePackage[amsmath,thmmarks,hyperref]{ntheorem}%[1.33] (bad use of this argument in siam class)
\begin{document}
\begin{equation}
\bar{x} = x + y
\tag{$\bar{x}$}
\label{eq:x}
\end{equation}
\end{document}
可以准确地追踪到问题出在哪里,但我倾向于简单地接受其他答案并使用\mbox
解决方法。
答案3
如果这可能只是你问题的第二部分的答案,那么输入\mbox
似乎可以解决问题:
\documentclass[review]{siamart0516}
\usepackage{amsmath}
\begin{document}
\begin{equation}
\bar{x} = x + y
\tag{\mbox{$\bar{x}$}}
\label{eq:x}
\end{equation}
\end{document}