\min
和的默认定义\max
基本上不会在它们后面插入空格,这在显示方程式中陈述优化问题等时看起来非常糟糕。我想不出任何方法可以在它们后面自动插入空格?例如,以下方法不起作用:
\renewcommand{\min}{\expandafter\,\operatorname*{min}}
空格仍然位于 min 之前。有没有办法仍能正确解析上标和下标?
添加:我基本上想要的是
\min_u\, G(u) + F(Ku)
在显示方程中,无需手动输入 \。更完整的陈述,可以更好地说明表达式的类型,将是
\min_{u \in X}\, G(u)+F(Ku) \quad\text{subject to}\quad Au=b.
您确实需要那里的额外空间,但如果不必手动输入就更好了。
答案1
的默认定义\min
是
\def\min{\mathop{\operator@font min}}
因此,它就像一个操作员\log
,会得到一个狭窄的空间,\min x
但不会\min(x)
你的重新定义
\renewcommand{\min}{\expandafter\,\operatorname*{min}}
是相同的
\renewcommand{\min}{\,\operatorname*{min}}
并在操作符前添加一个额外的细空格。 的唯一效果\expandafter
是在执行前扩展\operatorname
一步\,
,因此您的定义实际上相当于
\renewcommand{\min}{\,\protect\operatorname_*{min}}
其中_
,表示空格字符作为一级扩展仅表明它\protect
使其成为一个强大的命令。
答案2
正如 egreg 在他的第一条评论中所解释的那样,\min
et. al. 在后面跟有分隔符时具有正确的间距,因为它们有意地在放的值(取最小值)。当你使用它时,
\min_u G(u) + F(Ku)
这个表达式本身就很含糊,而自然解析为“最小值G(u)
,加上……哦,等等”会在中途引起一些不协调。所以真正的答案是不要这样做,而是写
\min_u \{ G(u) + F(Ku) \}
相反。作为奖励,你可以删除下标并添加一些在小字体中看起来不好的冗长条件,例如
\min_u \{ G(u) + F(Ku) \mid u \in X, Au = b \}
这比你的第二个片段有优势,
\min_{u \in X}\, G(u)+F(Ku) \quad\text{subject to}\quad Au=b
不会错误地u
在其范围之外对“绑定变量”进行外部引用。
我意识到您可能认为省略分隔符是遵循了您所在领域的某种惯例。但是,除非您对此事进行了具体的思考并形成了坚定的观点,否则您应该考虑在此处更改您的风格,因为它既有印刷问题(如您所观察到的),也有数学问题。
PS 如果你真的必须这样做,最简单的解决方法可能是使用参数而不是下标。例如,
\newcommand*\mymin[1][]{\min_{#1}\,}
请参阅此最简文档并将其与“标准”进行比较:
\documentclass{article}
\newcommand*\mymin[1][]{\min_{#1}\,}
\begin{document}
$\min A \quad \min_u A$
$\mymin A \quad \mymin[u] A$
\[ \min A \quad \min_u A\]
\[ \mymin A \quad \mymin[u] A\]
\end{document}
为什么不直接使用下标字符?首先,因为解析它很麻烦,因为它不像宏那样方便地“收集”其参数,因此,移动该参数很困难。其次,从编程的角度来看,您只想用它做一件事\min
,即对其进行下标,因此将其与抽象的“执行此操作”关联起来更合乎逻辑。抽象具有很好的副作用,即启用抽象实现,即在后面放置一个空格。
答案3
临时解决方案。这个只是检查旁边是否有下标。仅此而已。
\documentclass{scrartcl}
\usepackage{mathtools}
\makeatletter
\def\raremin{\@ifnextchar_\@rareminsub\@raremin}
\def\@rareminsub_#1{\min_{#1}\,}
\def\@raremin{\min\,}
\makeatother
\begin{document}
$ \raremin_u G(u) + F(Ku) $
\[ \raremin_u G(u) + F(Ku) \]
\end{document}