我怎样才能在 DeclareMathOperator* 后面加上空格并保持对齐?

我怎样才能在 DeclareMathOperator* 后面加上空格并保持对齐?

在优化问题中,我使用

\usepackage{amsmath}
\DeclareMathOperator*{\minimize}{\text{minimize}}
\DeclareMathOperator*{\subjto}{\text{subject to}}

声明一些要用作的运算符\minimize_{x, \beta}等等。

这些工作:

最小化和服从的示例

但是,为了获得正确的间距,我必须使用

\minimize_{x, \beta} \quad& x^T x - 2\beta \\
\subjto \quad& \beta > 0 \\
\subjto \quad& \sum_{i=1}^{n} x_i^2 < 1

我不想使用手动\quad间距,原因很明显:方便、优雅、灵活性(如果我想要或者\qquad以后想要怎么办?)等等。

我试过

  • 使用\DeclareMathOperator*{\minimize}{\text{minimize}\quad},但这会导致 的下标间距x, \beta错误——由于框较宽,它会向右移动。
  • 使用\DeclareMathOperator*{\temp@minimize}{\text{minimize}}with \newcommand{\minimize}[0]{\temp@minimize\quad}(带有适当的 catcodes),但这不起作用,因为操作员不接受命令,它需要一个下标。
  • 使用带有参数的类似版本[1],由于相同的原因而失败。
  • 使用类似的版本\def,由于同样的原因失败。

有什么想法吗?最优雅的方法是什么?

答案1

您可以在中设置问题array以调整间距。例如一致性,最好将其定义为一个环境:

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath,array,environ}
\DeclareMathOperator*{\minimize}{\text{minimize}}
\DeclareMathOperator*{\subjto}{\text{subject to}}
\newcolumntype{R}{>{\displaystyle}r}
\newcolumntype{L}{>{\displaystyle}l}
\newenvironment{problem}
  {\renewcommand{\arraystretch}{1.5}%
   \begin{array}{R@{\quad}L}}
  {\end{array}}
\begin{document}

\begin{align*}
  \minimize_{x, \beta} \quad& x^T x - 2\beta \\
  \subjto \quad& \beta > 0 \\
  \subjto \quad& \sum_{i=1}^{n} x_i^2 < 1
\end{align*}

\[
  \begin{problem}
    \minimize_{x, \beta} & x^T x - 2\beta \\
    \subjto & \beta > 0 \\
    \subjto & \sum_{i=1}^{n} x_i^2 < 1
  \end{problem}
\]

\end{document}

\quad后一个选项允许您“批量”调整列分隔。

答案2

\text{...}你可以简单地不在宏的第二个参数中使用“包装器” \DeclareMathOperator*}。相反,只需写

\newcommand\myspacer{\quad}
\DeclareMathOperator*{\minimize}{minimize\myspacer}
\DeclareMathOperator*{\subjto}{subject\ to\myspacer}

宏目前\myspacer设置为。如果您想将其更改为或,这很容易做到,不是吗?\quad\qquad\

另一个优势是不是使用\text包装器的优点是,字符串“minimize”和“subject to”将始终以直立罗马字体排版,即使它们可能出现的代码块恰好以斜体排版 - 就像在定理主体中可能发生的情况一样。

最后,我建议x^T\! x不要只写x^T x。这样做可以减少转置符号和第二个 之间的(在我看来不美观的)视觉“间隙” x

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath}
\newcommand\myspacer{\quad}
\DeclareMathOperator*{\minimize}{minimize\myspacer}
\DeclareMathOperator*{\subjto}{subject\ to\myspacer}
\begin{document}
\begin{align*}
\minimize_{x, \beta} & x^T\! x - 2\beta \\
\subjto & \beta > 0 \\
\subjto & \sum_{i=1}^{n} x_i^2 < 1
\end{align*}
\end{document}

相关内容