在优化问题规范中对齐 \max 运算符和 \text

在优化问题规范中对齐 \max 运算符和 \text

最大限度操作者,从而破坏了流程中的对齐。

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath}
\begin{document}    
\begin{align*}
  &\max c_i \\
  &\text{subject to:} \\
  &\quad v^{\top}_i v_i = 1 \\
  &\quad v^{\top}_i v_j = 0 \ \forall j < i
\end{align*}
\end{document}

答案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}

相关内容