在下面的例子中,我想知道如何“正确地”消除(或减少)“最小化”/“受制于”与相应方程式之间的水平间距,同时保持两个单词的首字母对齐,并在等号处保持对齐,此外,所有方程式都已编号。
所谓“正确”,我建议不要使用负水平间距\hspace{-...}
。
谢谢。
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{align}
&\text{minimize} &S(f) &=\int_{-\infty}^{\infty} f^{\prime\prime}(x)^2 \, \text{d}x \label{eq:min-energy} \\
&\text{subject~to} &f(x_i) &= y_i, \enspace \text{for} \; i=1,\ldots,m \label{eq:interp-cond} \\
& &f^{\prime\prime}(x_1) &= f^{\prime\prime}(x_m)=0 \label{eq:natural-bc} \\
& &f &\in C^2(-\infty,\infty). \label{eq:C2-constraint}
\end{align}
\end{document}
答案1
如果您不想插入自动间距align
,您应该看看alignat
。(其他人比我更好地解释了如何使用它,因此下面我将仅举一个我认为间距相对舒适的示例。)
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{alignat}{10}
&\text{minimize} &S(f) &=\int_{-\infty}^{\infty} f^{\prime\prime}(x)^2 \, \text{d}x \label{eq:min-energy} \\
&\text{subject~to}\; &f(x_i) &= y_i, \enspace \text{for} \; i=1,\ldots,m \label{eq:interp-cond} \\
& &f^{\prime\prime}(x_1) &= f^{\prime\prime}(x_m)=0 \label{eq:natural-bc} \\
& &f &\in C^2(-\infty,\infty). \label{eq:C2-constraint}
\end{alignat}
\end{document}
笔记:
\text{subject~to}
在我插入之后\;
。由于f''
下一行有 ,我发现没有额外的空间看起来有点拥挤。你可以另作决定。- 我指定
10
为alignat 的强制参数因为我很懒;请参阅链接了解解释。
不过,我个人认为,在这种情况下,最好不要在等号处对齐。我认为
\begin{alignat}{10}
&\text{minimize} &&S(f) =\int_{-\infty}^{\infty} f^{\prime\prime}(x)^2 \, \text{d}x \label{eq:min-energy} \\
& &&f(x_i) = y_i, \enspace \text{for} \; i=1,\ldots,m \label{eq:interp-cond} \\
&\text{subject to}\, \smash{\left\lbrace\vphantom{\begin{array}{l} f \\ f \\ f\end{array}} \right.} &&f^{\prime\prime}(x_1) = f^{\prime\prime}(x_m)=0 \label{eq:natural-bc} \\
& &&f \in C^2(-\infty,\infty). \label{eq:C2-constraint}
\end{alignat}
看起来更好。
(还有其他方法可以让大括号跨越多行alignat
,上面给出的方法有点儿像 hack,但不需要任何额外的包。如果你不太懒,可以\vphantom{\begin{array}... \end{array}}
用精心选择的高度替换\rule{0pt}{<height>}
;高度 5.5ex 似乎没问题。)
答案2
这会将文本左对齐,放置在对齐点左侧的等宽框中。 \mathllap
重叠此空间的一部分,也使用对齐点。宽度的选择是一个美学问题。
\documentclass{article}
\usepackage{mathtools}
\usepackage{showframe}% alignment tool
\begin{document}
\begin{align}
\makebox[1.25in][l]{minimize}\mathllap{S(f)} &=\int_{-\infty}^{\infty} f^{\prime\prime}(x)^2 \, \text{d}x \label{eq:min-energy} \\
\makebox[1.25in][l]{subject~to}\mathllap{f(x_i)} &= y_i, \enspace \text{for} \; i=1,\ldots,m \label{eq:interp-cond} \\
f^{\prime\prime}(x_1) &= f^{\prime\prime}(x_m)=0 \label{eq:natural-bc} \\
f &\in C^2(-\infty,\infty). \label{eq:C2-constraint}
\end{align}
\end{document}
坦率地说,我更喜欢 flalign 解决方案:
\documentclass{article}
\usepackage{mathtools}
\usepackage{showframe}% alignment tool
\begin{document}
\begin{flalign}
&\text{minimize} & S(f) &=\int_{-\infty}^{\infty} f^{\prime\prime}(x)^2 \, \text{d}x \label{eq:min-energy} && \\
&\text{subject~to} & f(x_i) &= y_i, \enspace \text{for} \; i=1,\ldots,m \label{eq:interp-cond} && \\
&& f^{\prime\prime}(x_1) &= f^{\prime\prime}(x_m)=0 \label{eq:natural-bc} && \\ %actually, on needed in one line
&& f &\in C^2(-\infty,\infty). \label{eq:C2-constraint}
\end{flalign}
\end{document}
答案3
您可以使用optidef
包来减少“最小化”/“受制于”与相应方程之间的水平间距。这里有一个例子。
\documentclass[a4paper,12pt]{article}
\usepackage{optidef}
\usepackage{amsmath,amssymb}
\begin{document}
\begin{mini!}<b>
{}{S(f) =\int_{-\infty}^{\infty} f''^2(x) \, \textup{d}x \label{eq:min-energy}}{}{}
\addConstraint {f(x_i)}{= y_i,}{ \textup{for} \; i=1,\ldots, m \label{eq:interp-cond} }
\addConstraint { f''(x_1) }{= f''(x_m)=0 \label{eq:natural-bc}}{}
\addConstraint { f}{\in C^2(-\infty,\infty). \label{eq:C2-constraint}}{}
\end{mini!}
\end{document}