我正在尝试使用我在算法中定义的argmin
命令argmax
,但我总是得到不在中间而是在右边的参数。有人知道如何将参数放在中间吗?
我声明一下操作人员:
\DeclareMathOperator*{\argmin}{\arg\!\min}
\DeclareMathOperator*{\argmax}{\arg\!\max}
我使用以下包来编写算法:
\usepackage[chapter]{algorithm}
\usepackage{algorithmic}
完整算法代码:
\begin{algorithm}
\begin{algorithmic}
\STATE some statement here
\WHILE{!stop}
\STATE $s_{i} = \argmin_{p} \| l_{j} - s_{p} \|$
\ENDWHILE
\end{algorithmic}
\end{algorithm}
答案1
$
引入文本样式,您将需要\displaystyle
或\limits
。
(\sum
,\int
,\lim
,... 的行为方式相同:显示样式公式的上标和下标位于符号的上方和下方,在文本样式公式中,它们的排版方式与普通的上标和下标相同。)
如果您发现这两种解决方案都不令人满意,您可以定义一个\limits
内置的附加命令:
\DeclareMathOperator*{\argmin}{argmin}
\DeclareMathOperator*{\argmax}{argmax}
\newcommand*{\argminl}{\argmin\limits}
\newcommand*{\argmaxl}{\argmax\limits}
或者使用具有该功能的原始宏名称:
\DeclareMathOperator*{\argminOp}{argmin}
\DeclareMathOperator*{\argmaxOp}{argmax}
\newcommand*{\argmin}{\argminOp\limits}
\newcommand*{\argmax}{\argmaxOp\limits}
但是你也可以不用\DeclareMathOperator*
:
\newcommand*{\argmin}{\operatornamewithlimits{argmin}\limits}
\newcommand*{\argmax}{\operatornamewithlimits{argmax}\limits}
我还声明了您的运算符,其中没有预定义的运算符\arg
,\max
因为运算符通常都是直立字体,因此无需手动重新调整空间(\!
)。
代码 A ( \limits
)
\documentclass{book}
\usepackage[chapter]{algorithm}
\usepackage{algorithmic}
\usepackage{amsmath}
\DeclareMathOperator*{\argmin}{argmin}
\DeclareMathOperator*{\argmax}{argmax}
\begin{document}
\begin{algorithm}
\begin{algorithmic}
\STATE some statement here
\WHILE{!stop}
\STATE $s_{i} = \argmin\limits_{p} \| l_{j} - s_{p} \|$
\ENDWHILE
\end{algorithmic}
\end{algorithm}
\end{document}
代码 B ( \displaystyle
)
\documentclass{book}
\usepackage[chapter]{algorithm}
\usepackage{algorithmic}
\usepackage{amsmath}
\DeclareMathOperator*{\argmin}{argmin}
\DeclareMathOperator*{\argmax}{argmax}
\begin{document}
\begin{algorithm}
\begin{algorithmic}
\STATE some statement here
\WHILE{!stop}
\STATE $\displaystyle s_{i} = \argmin_{p} \| l_{j} - s_{p} \|$
\ENDWHILE
\end{algorithmic}
\end{algorithm}
\end{document}
代码 C(内置\limits
)
\documentclass{book}
\usepackage[chapter]{algorithm}
\usepackage{algorithmic}
\usepackage{amsmath}
\DeclareMathOperator*{\argmin}{argmin}
\DeclareMathOperator*{\argmax}{argmax}
\newcommand*{\argminl}{\argmin\limits}
\newcommand*{\argmaxl}{\argmax\limits}
\begin{document}
\begin{algorithm}
\begin{algorithmic}
\STATE some statement here
\WHILE{!stop}
\STATE $ s_{i} = \argminl_{p} \| l_{j} - s_{p} \|$
\ENDWHILE
\end{algorithmic}
\end{algorithm}
\end{document}
输出
答案2
您可以使用\limits
(但这会破坏连续行之间的常规跳过):
\documentclass{book}
\usepackage[chapter]{algorithm}
\usepackage{algorithmic}
\usepackage{amsmath}
\DeclareMathOperator*{\argmin}{\arg\!\min}
\DeclareMathOperator*{\argmax}{\arg\!\max}
\begin{document}
\begin{algorithm}
\begin{algorithmic}
\STATE some statement here
\WHILE{!stop}
\STATE $s_{i} = \argmin\limits_{p} \| l_{j} - s_{p} \|$
\ENDWHILE
\end{algorithmic}
\end{algorithm}
\end{document}