当我尝试编译这个时:
\documentclass{article}
\usepackage{amsmath}
\usepackage{nath}
\DeclareMathOperator{\argmin}{arg\,min}
\begin{document}
\begin{equation}
\argmin \log(\sum_{x=1}^2 x^2)
\end{equation}
\end{document}
我得到:
Test.tex:7: Limit controls must follow a math operator
Test.tex:7: Limit controls must follow a math operator
这到底是什么意思?我该如何解决?
答案1
为了使分隔符的自动调整功能正常工作,nath
重新定义了许多 TeX 内部函数。amsmath
还定义了许多 TeX 内部函数。既没有nath
考虑amsmath
到其他包可能会重新定义内部宏,因此也未考虑到错误。
默认情况下,\log
定义如下:
> \log=macro:
->\mathop {\operator@font log}\nolimits .
l.3 \show\log
但是,在加载amsopn
(由 加载amsmath
)之后,我们得到
> \log=macro:
->\qopname \relax o{log}.
l.5 \show\log
这就是以下最小文档失败的原因:
\documentclass{article}
\usepackage{nath}
\usepackage{amsopn}
\begin{document}
$\log$
\end{document}
因此,您必须在加载amsmath
和之间进行选择nath
。例如,您的最小示例可以是没有加载的进程amsmath
:
\documentclass{article}
\usepackage{nath}
\makeatletter
\def\argmin{\mathop{\operator@font arg\,min}\nolimits}
\makeatother
\begin{document}
\begin{equation}
\argmin \log( \sum_{i=1}^2 x^2)
\end{equation}
\end{document}
另一个选择是保存并恢复诸如\log
、、、等运算符的含义\max
。\arg
\sin
\documentclass{article}
\let\normallog \log
\usepackage{amsmath,nath}
\let\log \normallog
\makeatletter
\def\argmin{\mathop{\operator@font arg\,min}\nolimits}
\makeatother
\begin{document}
\begin{equation}
\argmin \log( \sum_{i=1}^2 x^2)
\end{equation}
\end{document}
nath
提供了一些用于显示数学的宏(\wall .. \return
);捆绑包中的其他一些包amsmath
(amsgen
、amstext
、amsfonts
)可以与之配合使用nath
。
编辑:看来这nath
是错的。nath
重新定义\mathop
。引用自nath.sty
:
\mathop 被重新定义以避免将以下 Bins 误解为一元运算符(参见 TeXbook,第 170 页)。
以下定义确定了 Op 和 Bin 之间的间距。(根据 [TeXBook,第 170 页],“这种情况从未发生过,因此纯 TeX 将其保留为未定义,从而使 Bin 成为一元的。”)
如果你只是恢复 的定义\mathop
,那么一切都正常:
\documentclass{article}
\usepackage{amsmath,nath}
\makeatletter
\let\mathop\o@mathop
\makeatother
\DeclareMathOperator{\argmin}{arg\,min}
\begin{document}
\begin{equation}
\argmin \log(\sum_{x=1}^2 x^2)
\end{equation}
\end{document}