如何在 Latex 中获取 argmin 或 argmax?我找到了两个解决方案:
\underset{x}{\operatorname{argmax}}
\DeclareMathOperator*{\argmin}{arg\,min}
还有其他想法吗?
[1]http://www.breakthru.altervista.org/?p=27
[2]http://researchonsearch.blogspot.com/2007/05/enter-argmax-argmin-in-latex.html
答案1
正如 Pieter 指出的那样,在 LaTeX 中定义 argmin 和 argmax 运算符的正确方法是:
\usepackage{amsmath}
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator*{\argmin}{arg\,min}
实际上,使用该amsopn
包就足够了,但它是amsmath
内部加载的,无论如何都建议用于数学排版。
将*
带\DeclareMathOperator*
下划线的论点放在单词下面,而不是单词的右下角。
答案2
概括
在后续文章中,我们假设使用 LaTeX。
初步问题
1. “arg” 和 “min” 之间是否应该用一个细空格隔开?
这是个人喜好问题。 的默认定义\limsup
有一个很窄的空格,而“arcsin”通常在两个部分之间没有空格。 一致性始终是关键词:使用宏定义可以确保一致性,并且如果需要从一个选项切换到另一个选项,还可以轻松修改整个文档的排版。
2. 在显示样式中,限制是否应该低于操作员?
这也是有争议的,应该遵循文档编写领域中使用的惯例。
3. 操作员名称是否需要直立排版?
当然,就像所有其他运算符/函数名称一样,例如正弦和余弦。
可用工具
1.amsmath
在amsmath
序言中,
\DeclareMathOperator*{\argmin}{arg\,min} % thin space, limits underneath in displays
\DeclareMathOperator*{\argmin}{argmin} % no space, limits underneath in displays
\DeclareMathOperator{\argmin}{arg\,min} % thin space, limits on side in displays
\DeclareMathOperator{\argmin}{argmin} % no space, limits on side in displays
当然,只能使用其中一种。在文档中输入即可\argmin
,运算符周围的间距将根据数学排版的通用规则正确设置。
看似不同的
\newcommand{\argmin}{\operatornamewithlimits{argmin}}
事实并非如此,因为它本质上与 相同\DeclareMathOperator*{\argmin}{argmin}
;而且它使用了一个已弃用的命令,应该是\operatorname*
。
2. 没有包装
以下定义与上面的非常相似,顺序相同
\newcommand{\argmin}{\mathop{\mathrm{arg\,min}}
\newcommand{\argmin}{\mathop{\mathrm{argmin}}
\newcommand{\argmin}{\mathop{\mathrm{arg\,min}\nolimits}
\newcommand{\argmin}{\mathop{\mathrm{argmin}\nolimits}
和\underset
\underset{x}{\mathrm{argmin}}
问题和一个答案中也提到了这一点,但这是错误的,从视觉比较就可以看出。
3. 差异
“无包”版本比版本要严格得多amsmath
,因为这个包可以接收nonamelimits
会自动更改的选项,全部诸如 之类的运算符\lim
,\max
通常在下方(在显示中)有限制,以便将它们放在侧面。当然,相同的选项也会对新定义的运算符起作用,前提是\DeclareMathOperator*
已经使用过。
测试文档
在下面的测试文件中,将比较所提出的定义或构造。
\documentclass{article}
\usepackage{amsmath}
% limits underneath
\DeclareMathOperator*{\argminA}{arg\,min} % Jan Hlavacek
\DeclareMathOperator*{\argminB}{argmin} % Jan Hlavacek
\DeclareMathOperator*{\argminC}{\arg\min} % rbp
\newcommand{\argminD}{\arg\!\min} % AlfC
\newcommand{\argminE}{\mathop{\mathrm{argmin}}} % ASdeL
\newcommand{\argminF}{\mathop{\mathrm{argmin}}\limits} % ASdeL
% limits on side
\DeclareMathOperator{\argminG}{arg\,min} % Jan Hlavacek
\DeclareMathOperator{\argminH}{argmin} % Jan Hlavacek
\newcommand{\argminI}{\mathop{\mathrm{argmin}}\nolimits} % ASdeL
\newcommand{\cs}[1]{\texttt{\symbol{`\\}#1}}
\begin{document}
\begin{align}
&\cs{argminA} & \argminA_x f(x) &= \{x \mid f(x) = \min_{x'} f(x')\} \\
&\cs{argminB} & \argminB_x f(x) &= \{x \mid f(x) = \min_{x'} f(x')\} \\
&\cs{argminC} & \argminC_x f(x) &= \{x \mid f(x) = \min_{x'} f(x')\} \\
&\cs{argminD} & \argminD_x f(x) &= \{x \mid f(x) = \min_{x'} f(x')\} \\
&\cs{argminE} & \argminE_x f(x) &= \{x \mid f(x) = \min_{x'} f(x')\} \\
&\cs{argminF} & \argminF_x f(x) &= \{x \mid f(x) = \min_{x'} f(x')\} \\
&\cs{underset} & \underset{x}{\mathrm{argmin}} f(x) &= \{x \mid f(x) = \min_{x'} f(x')\}\\
&\cs{argminG} & \argminG_x f(x) &= \{x \mid f(x) = \min_{x'} f(x')\} \\
&\cs{argminH} & \argminH_x f(x) &= \{x \mid f(x) = \min_{x'} f(x')\} \\
&\cs{argminI} & \argminI_x f(x) &= \{x \mid f(x) = \min_{x'} f(x')\}
\end{align}
\end{document}
结果
正如所料,许多行排版相同。但是,用 定义的宏\mathop
不会遵循该nonamelimits
选项。而且 的结果\argminD
显然是错误的,因为限制排版在“max”下面,而不是整个运算符名称下面。
构造 with\underset
是错误的,因为它不会在操作符后使用正确的间距:所有其他空格后面都有一个细空格,这是正确的排版方式。比较\sin x
和\mathrm{sin}x
以在不同的上下文中查看这个细空格。
请注意\argminC
和\argminA
给出的结果相同, 和 也是如此\argminD
。\argminB
解释:\arg
和\max
已经定义为运算符,因此如果一个运算符紧跟另一个运算符,TeX 会插入一个细小的空格。使用\argminC
或\argminD
只会让 TeX 更加吃力,与\argminA
或相比没有任何优势\argminB
。
答案3
答案4
另一种选择(在某种意义上是较差的解决方案,请参阅下面的评论)可能是\argmin
根据\min
和\arg
命令来定义。
\newcommand{\argmin}{\arg\!\min}
通过这种方式,1)的\argmin
行为将始终与 相同\min
,2)不需要amsmath
或关心\operator...
命令 3)是的,变量不在中心(它位于min
部分的中心),但这也可能是您想要的(因为它以与 a 相同的方式居中\min
,并且中的“g”\arg
不会进一步降低不足之处)。
\documentclass[fleqn]{article}
\newcommand{\argmin}{\arg\!\min}
\begin{document}
\[ \argmin_x f(x) = \{x | f(x) = \min_{x'} f(x')\} \]
\[ \min_x f(x) = \{f(x) | f(x) < f(x_0) \forall x_0 \in R \]
\end{document}