在优化问题中,我使用
\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}