305

How can you get the argmin or argmax in Latex? Two solutions I found are:

\underset{x}{\operatorname{argmax}} 

\DeclareMathOperator*{\argmin}{arg\,min}

Any other ideas?

[1] http://www.breakthru.altervista.org/?p=27

[2] http://researchonsearch.blogspot.com/2007/05/enter-argmax-argmin-in-latex.html

3
  • 32
    How do these solutions (especially the second) feel not right? The \DeclareMathOperator is the way to go in this case.
    – Pieter
    Nov 11, 2010 at 17:57
  • 1
    Personally, I like the look of \text{arg}\,\max\limits_{\theta}\,
    – Jean-Paul
    Sep 7, 2016 at 8:11
  • what about how to make it work in Jupyter? Aug 12, 2019 at 3:15

9 Answers 9

337

As Pieter pointed out, the correct way to define argmin and argmax operators in LaTeX is:

\usepackage{amsmath}
\DeclareMathOperator*{\argmax}{arg\,max}
\DeclareMathOperator*{\argmin}{arg\,min}

Actually, using the amsopn package would be sufficient but it's loaded by amsmath internally, which is recommended for math typesetting anyway.

The * in \DeclareMathOperator* places the underscored argument underneath the word rather than to the bottom right of it.

8
  • 57
    If you use \DeclareMathOperator*{\argmin}{\arg\!\min} you get rid of the ugly space between arg and min.
    – rbp
    Apr 6, 2011 at 21:39
  • 37
    @rbp Why should one use \arg\min when simply argmin does the same?
    – egreg
    Jul 8, 2012 at 15:31
  • 4
    @egreg you're right. I arrived at this one from some experimentation with other options, and didn't look back :)
    – rbp
    Jul 9, 2012 at 11:56
  • 5
    In ConTeXt that is: \definemathcommand [argmin] [limop] {\mfunction{arg\,min}}
    – mb21
    Jul 30, 2013 at 11:49
  • 10
    Explanation: I left the thin space (\,) between the arg and min because that's what the original poster had in the question, so I assumed that they wanted the space there. Personally I would just do \DeclareMathOperator*{\argmin}{argmin}, without the space. Aug 28, 2015 at 1:14
170

Summary

In the sequel, LaTeX is assumed.

Preliminary questions

1. Should a thin space separate “arg” from “min”?

This is a matter of personal preference. The default definition for \limsup has a thin space, on the other hand “arcsin” is usually written without a space between the two components. Consistency is, as always, the keyword: using a macro definition will ensure it and also easiness in modifying the typesetting in the whole document, if switching from one option to another is needed.

2. Should limits go below the operator in display style?

Also this is debatable and conventions used in the field the document is written for should be followed.

3. Should the operator name be typeset upright?

Definitely, like all other operator/function names such as sine and cosine.

Available tools

1. amsmath

With amsmath one can do, in the preamble,

\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

Of course, only one of these should be used. In the document it's sufficient to type \argmin and the spacing around the operator will be the right one according to the common rules of math typesetting.

The seemingly different

\newcommand{\argmin}{\operatornamewithlimits{argmin}}

is not really so, because it's essentially the same as \DeclareMathOperator*{\argmin}{argmin}; moreover it uses a deprecated command, that should be \operatorname*.

2. No package

The following definitions are very similar to the ones above, in the same order

\newcommand{\argmin}{\mathop{\mathrm{arg\,min}}
\newcommand{\argmin}{\mathop{\mathrm{argmin}}
\newcommand{\argmin}{\mathop{\mathrm{arg\,min}\nolimits}
\newcommand{\argmin}{\mathop{\mathrm{argmin}\nolimits}

With \underset

\underset{x}{\mathrm{argmin}}

This also was mentioned in the question and in one answer, but it is wrong, as the visual comparison will show.

3. Differences

The “no package” version is much more rigid than the amsmath version, because this package can receive the nonamelimits option that will automatically change all operators such as \lim, \max that usually have limits underneath (in displays) to have them on the side. The same option would of course act also on newly defined operators, provided \DeclareMathOperator* has been used.

Test document

In the following test document, the proposed definitions or constructions will be compared.

\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}

enter image description here

Results

As predicted, many lines typeset the same. However, the macros defined with \mathop will not obey the nonamelimits option. Also the result of \argminD is clearly wrong, as the limit is typeset below “max” and not below the whole operator name.

The construction with \underset is wrong because it will not use the correct spacing after the operator: a thin space follows all others and it is the right way to typeset. Compare \sin x and \mathrm{sin}x to see this thin space in a different context.

Note that \argminC and \argminA give the same result, as well as \argminD and \argminB. Explanation: \arg and \max are already defined as operators, so TeX inserts a thin space if one directly follows another one. Using \argminC or \argminD just makes TeX spin its wheels a little more, with no advantage over \argminA or \argminB.

10
  • 2
    This should be the accepted answer.
    – Alex
    Nov 7, 2018 at 21:30
  • Isn't \newcommand{\argmin}{\operatornamewithlimits{argmin}} different in that it doesn't use amsmath package? May 15, 2019 at 15:00
  • 1
    @HomeroEsmeraldo \operatornamewithlimits is an obsolete command defined by amsopn (a package loaded by amsmath, rarely used by itself).
    – egreg
    May 15, 2019 at 15:08
  • 1
    Thanks. For some reason only \underset gave satisfactory results for with (with x being under argmin, not adjacent to it).
    – Dan M.
    May 23, 2019 at 2:15
  • what about how to make it work in Jupyter? Aug 12, 2019 at 3:15
39

Use \usepackage{amsmath} and then:

\operatorname*{argmin}_\theta f(x)

enter image description here

Or similarly (for adding a space),

\operatorname*{arg\,max}_\theta f(x)

enter image description here

2
  • concise and to the point! Aug 17, 2020 at 7:54
  • It works when used in \begin{equation} but not using $$
    – martin36
    Nov 15 at 8:26
33

I use \newcommand{\argmin}{\operatornamewithlimits{argmin}}.

5
  • 4
    +1 I like this - why overcomplicate things? This looks exactly the same as the \DeclareMathOperator* answer.
    – zelanix
    Aug 13, 2014 at 13:52
  • 5
    This yields "argmin". To get "arg min" (arguably the most usual notation), set it to {arg\,min}. Jan 21, 2016 at 16:38
  • 3
    Google gave me 669,000 answers for "arg min" and 520,000 answers for "argmin", so I'd call it a tie. ;-)
    – PatrickT
    Dec 3, 2018 at 4:49
  • this does work...? is there a missing import statement? Aug 12, 2019 at 3:16
  • 1
    Google Scholar got me 171,000 for "arg min" and 116,000 for "argmin".
    – Lori
    Feb 7, 2021 at 6:02
9

Just another alternative (in some sense the poorer solution around, see comment below), could be to define \argmin in terms of \min and \arg commands.

\newcommand{\argmin}{\arg\!\min}

In this way, 1) \argmin will behave always the same way as \min, 2) doesn't need amsmath or care about \operator... commands 3) yes, the variable in not centered (it is centered in the min part), but that may even be what you want (since it is centered in the same ways a \min, also the 'g' in \arg doesn't further lower the under-argument).

\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}

argmin

4
  • 5
    This doesn't look like a good idea. \argmin_{x\in X\cap Y} f(x) will break it completely.
    – yo'
    Feb 2, 2014 at 18:03
  • What is the \arg command for anyway? Jun 3, 2014 at 12:47
  • 1
    @ThomasAhle, arg is for the argument function (angle in the complex plane, $z = |z| e^{i \arg z}$. tohecz is right by the way.
    – alfC
    Jun 3, 2014 at 15:33
  • @boycott.se-yo', good point.
    – alfC
    Dec 13, 2018 at 6:44
5

or you could use the underset command. For example:

    R = \underset{n} {\mathrm{argmax}} ~P(L_n|\mathbf{x})
1
  • 13
    Please don't use this. This makes argmin a mathord rather than a mathop and the spacing is incorrect. Moreover, this will not automatically adjust the limits in inline math mode.
    – Aditya
    Sep 19, 2013 at 15:19
4

Using \underset does not require any other package. An above answer says:

With \underset

This also was mentioned in the question and in one answer, but it is wrong, as the visual comparison will show.

If the only thing "wrong" is that there is no space between the argmax and the f(x), then just add \, (thin space) to fix the problem:

z = \underset{x}{\mathrm{argmax}}f(x)

enter image description here

z = \underset{x}{\mathrm{argmax}}\, f(x)

enter image description here

2

I would use \mathop and \mathrm, and eventually \limits or \nolimits, depending on the desired behavior when combined with _ and ^. See below.

\documentclass{article}

\begin{document}

{
nothing:
\newcommand{\argmin}{\mathop{\mathrm{argmin}}}
$\argmin_a^b$
$$\argmin_a^b$$
}

{
limits:
\newcommand{\argmin}{\mathop{\mathrm{argmin}}\limits}
$\argmin_a^b$
$$\argmin_a^b$$
}

{
nolimits:
\newcommand{\argmin}{\mathop{\mathrm{argmin}}\nolimits}
$\argmin_a^b$
$$\argmin_a^b$$
}

\end{document}
-1

This works without any additional package. However it will create a new line.

$$\pi(s) = arg\max_\theta$$
2
  • 1
    $$...$$ is not recommended to use with LaTeX. Better use \[ ... \] for correct vertical spacing.
    – Stefan Kottwitz
    Dec 20, 2015 at 20:17
  • 5
    This solution will not typeset argmax correctly. Here arg will be in italic (and with bad spacing), and max will be upright. Dec 20, 2015 at 20:17

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .