答案1
该命令\max
构建一个数学运算符。TeX 的规则规定,在普通符号和数学运算符之间插入一个细空格;这在以下情况下是需要的:
$a\log x$
产生
如果没有这个薄空间就会导致错误的结果。
align
和环境align*
会形成成对的列,第一列右对齐,第二列左对齐。由于最常见的使用情况是这样的
\begin{align}
x &= y \\
a &= b
\end{align}
在对齐点后隐式添加了一个空的普通符号,因此等号(或一般的关系符号)的间距正确。 在您的例子中,您得到的等价于内联公式
${}\max c_i$
由于空组{}
被视为普通符号,因此您会得到一个很窄的空间。
可能的解决方案:\!
在之前添加\max
,取消这个狭窄的空间。
更好的解决方案:使用array
:
\documentclass{article}
\usepackage{amsmath,array}
\begin{document}
\begin{equation*}
\renewcommand{\arraystretch}{1.2}
\begin{array}{@{}>{\displaystyle}l@{}}
\max c_i \\
\textnormal{subject to:} \\
\quad v^{\top}_i v_i = 1 \\
\quad v^{\top}_i v_j = 0, \quad \forall j < i
\end{array}
\end{equation*}
\end{document}
简化输入的环境形式:
\documentclass{article}
\usepackage{amsmath,array}
\newenvironment{optimize}[1]
{\renewcommand{\arraystretch}{1.2}%
\quad\begin{array}{@{}>{\displaystyle}l@{}}
\hspace{-1em}#1\\
\hspace{-1em}\textnormal{subject to:}\\}
{\end{array}}
\begin{document}
\begin{equation*}
\begin{optimize}{\max c_i}
v^{\top}_i v_i = 1 \\
v^{\top}_i v_j = 0, \quad \forall j < i
\end{optimize}
\end{equation*}
\end{document}
答案2
该宏\max
的类型为“数学运算符”(简称为 mathop),这意味着,\thinspace
如果前面的数学原子\max
的类型为“普通数学”(简称为 mathord),则前面有一个;环境align
会自动在对齐点后插入一个类型为 mathord 的空数学原子,这就是最终得到(不需要的)空格的原因。
下面的代码显示了四种可能的补救措施;最简单的方法可能是\!
在之前立即插入(负薄空间)\max
。
附录:为了避免将转置符号之前的项的下标^{\top}
置于转置符号之后的项的下标之下,定义一个名为 的宏很有用\trans
。请参阅代码和屏幕截图以了解其实现。
\documentclass{article}
\usepackage{amsmath}
\newcommand\trans{\!{}^{\top}\!} % insert transpose symbol
\begin{document}
\begin{align*}
&\!\max c_i\\
&\text{max}\, c_i \\
&\mathord{\max}\, c_i\\
&\mathopen{}\max c_i\\
&\text{subject to} \\
&\quad v_i \trans v_i = 1 \\
&\quad v_i \trans v_j = 0 \ \forall\ j < i
\end{align*}
\end{document}