使用 SIAM LaTeX 模板文件时出现 amsmath 包错误

使用 SIAM LaTeX 模板文件时出现 amsmath 包错误

我正在使用最新的 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一起使用时,会重新定义(的内部命令)来执行其他操作thmmarksamsmath\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}

相关内容